PySimpleGui_Note
PySimpleGui_Note
1.模块安装与导入
# 安装命令
pip install PySimpleGui
# 模块导入
import PySimpleGui # 方式一
import PySimpleGui as Sg # 方式二,方便后续引用
2.创建基本页面
import PySimpleGui as Sg
# 控制页面布局
layout = [
[Sg.Text("第一行文字")],
[Sg.Text("姓名:"),Sg.InputText("请输入姓名")],
[Sg.Button("确定"),Sg.Button("取消")],
]
# 定义程序的布局,返回一个windows类:Windows = Sg.Windows("程序的名称",layout=layout)
# 读取窗口,返回两个结果:一个是事件,一个是值: Windows.read()
# 启动界面和关闭界面
windows = Sg.windows("基本界面",layout=layout)
while 1:
event,value = windows.read()
if event == None: # event == None:用于判断是否点击右上角的x进行关闭的操作
windows.close() # 关闭窗口
break
3.窗口关闭事件
窗口关闭事件,即是通过点击右上角的X进行关闭
# 窗口关闭事件
if event == None: # 此时表示鼠标点击了右上角的X
windows.close() # 关闭窗口
if event == Sg.Win_CLOSED:
windows.close()
# 注意:必须定义窗口关闭事件,否则会消耗100%的CPU
4.按钮点击事件
# Sg.PopUp("弹窗提示信息") # 小弹窗
# 针对一个按钮对应的事件
if event == "确定":
# 点击按钮【确定】时执行的操作
Sg.PopUp("弹窗:点击了【确定】")
# 针对多个按钮执行的相应的事件
if event in ("确定","取消"):
Sg.Popup(f"弹窗:点击了【{event}】")
# 针对按钮的开头文字
if event.startswith("确"):
Sg.Popup(f"弹窗:点击了【{event}】")
# 针对按钮的结尾文字
if event.endswith("消"):
Sg.Popup(f"弹窗:点击了【{event}】")
# 特殊:像【文本元素】、【输入框】、【下拉菜单】等事件属性默认是关闭的,如果需要,可以手动设置他们的事件属性,enable_event=True为真时,他们也将具有事件属性
layout = [
[Sg.Text("第一行文字",enable="标题")],
[Sg.Text("姓名:"),Sg.InputText("请输入姓名")],
[Sg.Button("确定"),Sg.Button("取消")],
]
if event == "标题":
Sg.Popup("点击了【标题】")
5.获取输入窗口的值
1. 通过索引的方式进行引用
1. 通过字典的形式获取输入框的值
# 1.通过索引获取对应的值:windows.read()获取event和value,其中value是:{0: '', 1: ''},分别代表第一个输入框输入"",第二个输入框输入"",通过索引的方式可以获取到对应输入框的值
# 2.通过字典的形式获取输入框的值
layout = [
[sg.Text("标 题",enable_events=True)],
[sg.Text("姓名:"),sg.Input(key="username")],
[sg.Text("性别:"),sg.InputText(key="sex")],
# [sg.Text("文本")],
[sg.Button("确定"),sg.Button("取消")],
]
window = sg.Window("程序窗口",layout=layout)
while 1:
event,value = window.read()
if event == "确定":
sg.Popup(f"单击事件:{event},输入的用户名:{value.get('username')},输入的性别:{value.get('sex')}")
# 关于value和event以及事件触发enable_events
# value 记录了所有元素的值,如果对应元素有事件发生,那对应元素的key的值就会被记录,即如果元素的enable_events设置为真,那么当操作对应元素时,就会返回对应元素的值到values的列表中
6.主题
# 整体布局的主题设置:
Sg.theme("DarkGreen5")
# 内部允许设置的颜色:
['Black', 'BlueMono', 'BluePurple', 'BrightColors', 'BrownBlue', 'Dark', 'Dark2', 'DarkAmber', 'DarkBlack', 'DarkBlack1', 'DarkBlue',
'DarkBlue1', 'DarkBlue10', 'DarkBlue11', 'DarkBlue12', 'DarkBlue13', 'DarkBlue14', 'DarkBlue15', 'DarkBlue16', 'DarkBlue17',
'DarkBlue2', 'DarkBlue3', 'DarkBlue4', 'DarkBlue5', 'DarkBlue6', 'DarkBlue7', 'DarkBlue8', 'DarkBlue9', 'DarkBrown', 'DarkBrown1',
'DarkBrown2', 'DarkBrown3', 'DarkBrown4', 'DarkBrown5', 'DarkBrown6', 'DarkBrown7', 'DarkGreen', 'DarkGreen1', 'DarkGreen2',
'DarkGreen3', 'DarkGreen4', 'DarkGreen5', 'DarkGreen6', 'DarkGreen7', 'DarkGrey', 'DarkGrey1', 'DarkGrey10', 'DarkGrey11',
'DarkGrey12', 'DarkGrey13', 'DarkGrey14', 'DarkGrey15', 'DarkGrey2', 'DarkGrey3', 'DarkGrey4', 'DarkGrey5', 'DarkGrey6',
'DarkGrey7', 'DarkGrey8', 'DarkGrey9', 'DarkPurple', 'DarkPurple1', 'DarkPurple2', 'DarkPurple3', 'DarkPurple4',
'DarkPurple5', 'DarkPurple6', 'DarkPurple7', 'DarkRed', 'DarkRed1', 'DarkRed2', 'DarkTanBlue', 'DarkTeal', 'DarkTeal1',
'DarkTeal10', 'DarkTeal11', 'DarkTeal12', 'DarkTeal2', 'DarkTeal3', 'DarkTeal4', 'DarkTeal5', 'DarkTeal6', 'DarkTeal7',
'DarkTeal8', 'DarkTeal9', 'Default', 'Default1', 'DefaultNoMoreNagging', 'GrayGrayGray', 'Green', 'GreenMono', 'GreenTan',
'HotDogStand', 'Kayak', 'LightBlue', 'LightBlue1', 'LightBlue2', 'LightBlue3', 'LightBlue4', 'LightBlue5', 'LightBlue6',
'LightBlue7', 'LightBrown', 'LightBrown1', 'LightBrown10', 'LightBrown11', 'LightBrown12', 'LightBrown13', 'LightBrown2',
'LightBrown3', 'LightBrown4', 'LightBrown5', 'LightBrown6', 'LightBrown7', 'LightBrown8', 'LightBrown9', 'LightGray1',
'LightGreen', 'LightGreen1', 'LightGreen10', 'LightGreen2', 'LightGreen3', 'LightGreen4', 'LightGreen5', 'LightGreen6',
'LightGreen7', 'LightGreen8', 'LightGreen9', 'LightGrey', 'LightGrey1', 'LightGrey2', 'LightGrey3', 'LightGrey4', 'LightGrey5',
'LightGrey6', 'LightPurple', 'LightTeal', 'LightYellow', 'Material1', 'Material2', 'NeutralBlue', 'Purple', 'Python',
'PythonPlus', 'Reddit', 'Reds', 'SandyBeach', 'SystemDefault', 'SystemDefault1', 'SystemDefaultForReal', 'Tan', 'TanBlue', 'TealMono', 'Topanga']
# 如果设置的颜色不在上述颜色中,会提示以下警告信息并随机生成一种颜色
eg:
Sg.theme("Pink") # 此时生成的是随机颜色!!!
** Warning - Pink Theme is not a valid theme. Change your theme call. **
# 如果设置为空,也会随机生成颜色
Sg.theme("")
7.控件主题颜色设置
def change_theme_control():
layout = [
[sg.Text("标题")],
[sg.Text("姓名:"), sg.Input(key="username")],
[sg.Text("性别:"), sg.InputText(key="sex")],
[sg.Button("确定"), sg.Button("取消")],
]
# 设置主题背景色
# sg.theme_background_color("#A066D3") # Maroon #DA70D6
# 设置 边框 宽度
# sg.theme_border_width(8)
# 设置 按钮 颜色
# sg.theme_button_color('Pink') # 没效果
# 设置 元素背景颜色
# sg.theme_element_background_color('Dark') # 没效果
# 设置 主题元素文本颜色
# sg.theme_text_color('LightBlue3') # 没效果
# 设置 输入框背景颜色
# sg.theme_input_background_color('LightBlue3') # 没效果
# 设置 输入框文本颜色(只能设置输入框光标的颜色)
sg.theme_input_text_color('Red')
# 设置 进度_栏_边框的颜色
sg.theme_progress_bar_border_width() # 主题_进度_栏_边框_颜色
# # 主题_进度_栏_颜色
sg.theme_progress_bar_color()
sg.theme_slider_border_width() # 主题_滑块_边框_颜色
sg.theme_slider_color() # 主题_滑块_颜色
sg.theme_text_color("Red") # 主题_文本_颜色
sg.theme_text_element_background_color("Red") # 主题_文本_元素_背景_颜色
windows = sg.Window("部分控件设置",layout)
while 1:
event,values = windows.read()
if event == None:
windows.close()
break
8.批量创建
# 利用for循环进行多种元素创建:以列表的形式就是在同一行
layout[
[sg.In() for i in "ABCD"]
]
# 以key的形式就是分行创建
layout[
[[PySimpleGUI.In()] for i in ["12","34","56"]]
]
# eg:
def create_with_for():
# 创建在同一行
layout = [
[sg.In() for q in "ABCD"]
]
# 创建多行:
layout = [
[[sg.In()] for q in ["11",'22','33']]
]
windows = sg.Window("批量创建",layout=layout)
while 1:
event,values = windows.read()
if event == None:
windows.close()
break
9.自定义布局
# 页面布局时,可以用,进行多个元素的拼接,也可以使用+进行拼接,但是需要加上[]
def create_with_add():
layout = [
[sg.Text("标题")],
[sg.Text("姓名:")]+[sg.Input(key="username")], # 实现效果和使用,隔开一样
[sg.Text("性别:")]+[sg.InputText(key="sex")],
[sg.Button("确定"), sg.Button("取消")],
]
windows = sg.Window("批量创建",layout=layout)
while 1:
event,values = windows.read()
if event == None:
windows.close()
break
10.文本元素的参数
[PySimpleGUI.T(text,
key="-Text-", # 元素唯一标识符,用于元素的定位
size=(None, None), # 元素宽度,行高(int, int)
font=("宋体", 20), # 设定文字字体,大小,font="宋体",font=("宋体", int) or font["宋体", int]
auto_size_text=True, # 当设定值为True时,窗口自动适应文本大小
enable_events=False, # bool: 事件属性,设定为True时,点击文本发生事件
relief="solid", # 浮雕设计"raised", "sunken", "flat", "ridge", "solid", "groove"
border_width=20, # 当设定relief时,用来设定对应效果的边界宽度
text_color=None, # 文本颜色
background_color=None, # 文本背景颜色
justification=None, # 对齐方式: "left", "right", "center"
pad=None, # 元素间隔设定 记住左右上下((int, int), (int, int))当左右或上下值一样时(int, int)
right_click_menu=None, # 右击可以调出菜单 list[list[Union[List[str],str]]]
grab=None, # 如果为真,点击此元素可以移动拖拽窗口
tooltip=None, # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
visible=True)] # bool: 元素可见状态
]
# EG:
def create_with_add():
layout = [
[sg.Text("标题")],
[sg.Text("姓名:",text_color="Pink",)]+[sg.Input(key="username",text_color="Pink")],
[sg.Text("性别:",background_color="Purple")]+[sg.InputText(key="sex",background_color="Green")],
[sg.Button("确定"), sg.Button("取消")],
]
windows = sg.Window("批量创建",layout=layout)
while 1:
event,values = windows.read()
if event == None:
windows.close()
break
11.文本元素的更新
'''
语法:
windows[key].update()
eg:
windows[key].update(
value=None, # str更新文本(只更新文本可以智驾用字符串)
background_color=None, # 更新文本背景颜色
text_color=None, # 更新文本颜色
font=None, # 更新字体的名称或者大小
visible=None # 更新元素的可见状态
)
'''
def create_with_add():
layout = [
[sg.Text("标题")],
[sg.Text("姓名:",text_color="Pink",key="User")]+[sg.Input(key="username",text_color="Pink")],
[sg.Text("性别:",background_color="Purple",key="Pwd")]+[sg.InputText(key="sex",background_color="Green")],
[sg.Button("确定"), sg.Button("取消"),sg.Button("变色")],
]
windows = sg.Window("批量创建",layout=layout)
while 1:
event,values = windows.read()
if event == None:
windows.close()
break
elif event == "变色":
windows['User'].Update(
background_color="Pink",
text_color="Black"
)
windows['Pwd'].update(
background_color="Pink",
text_color="Black"
)
12.输入框的参数
[PySimpleGUI.In(text,
key="-Text-", # 元素唯一标识符,用于元素的定位
size=(None, None), # 元素宽度,行高(int, int)
text_color=None, # 输入框里的文本颜色
background_color=None, # 输入框的颜色
justification=None, # 对齐方式: "left", "right", "center"
disabled=None, # 元素禁用,如果为True则禁用,无法输入任何值
disable_readonly_background_color=None, # 元素禁用时的背景颜色设定
disable_readonly_text_color=None, # 元素禁用时的文本颜色设定
password_char="" # 密码字符,一般设置为*
font=("宋体", 20), # 设定文字字体,大小,font="宋体",font=("宋体", int) or font["宋体", int]
border_width=20, # 输入框边界线宽度设定
enable_events=False, # bool: 输入框的事件属性,设定为True时,输入值会发生事件
do_not_clear=True, # bool: 输入框内容不被清除,如果为False,一旦发生事件,该输入框内的值会被清楚
focus=False, # 设定焦点,如果为True,则光标显示在此输入框
pad=None, # 元素间隔设定 记住左右上下((int, int), (int, int))当左右或上下值一样时(int, int)
right_click_menu=None, # 右击可以调出菜单 list[list[Union[List[str],str]]]
grab=None, # 如果为真,点击此元素可以移动拖拽窗口
tooltip=None, # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
visible=True)] # bool: 元素可见状态
]
13.单行输入框更新方法
# update()方法更新元素
# windows[key].Update()
def change_language():
layout = [
[sg.Text("标题",key="title")],
[sg.Text("姓名:",text_color="Pink",key="User"),sg.Input(key="username_input",text_color="Pink")],
[sg.Text("性别:",text_color="Pink",key="Sex"),sg.InputText(key="sex_input")],
[sg.Button("确定",key='sure',size=(8,1)), sg.Button("取消",key='cancel',size=(8,1)),sg.Button("英文",size=(8,1)),sg.Button("中文",size=(8,1))],
]
windows = sg.Window("修改语言",layout=layout)
while 1:
event,values = windows.read()
print(event,"***")
if event == None:
windows.close()
break
elif event == "英文":
print(event)
windows['title'].update("Title")
windows['User'].Update("User:")
windows['Sex'].update("Sex:")
windows['sure'].update("Sure")
windows['cancel'].update("Cancel")
# windows['英文'].update("中文")
elif event == "中文":
windows['title'].update("标题")
windows['User'].Update("姓名:")
windows['Sex'].update("性别:")
windows['sure'].update("确定")
windows['cancel'].update("取消")
# windows['中文'].update("英文")
elif event in ("确定","sure"):
windows['username_input'].update(
# background_color='Pink',
value="已输入用户名",
disabled=None,
select=None,
visible=None,
text_color="red",
move_cursor_to="end", # 光标移动到最后
)
print(event)
elif event == "取消":
print(event)
# setFocus的方法,设置元素焦点
# windows[key].setFocus()
# windows[key].set_focus()
# SetTooltip的方法,更新元素悬浮提示
# windows[ky].SetTooltip()
# windows[key].set_ftooltip()
def test_focus():
layout = [
[sg.Text("标题",key="title")],
[sg.Text("姓名:",text_color="Pink",key="User"),sg.Input(key="username_input",text_color="Pink")],
[sg.Text("性别:",text_color="Pink",key="Sex"),sg.InputText(key="sex_input")],
[sg.Button("确定",key='sure',size=(8,1)), sg.Button("取消",key='cancel',size=(8,1)),sg.Button("英文",size=(8,1)),sg.Button("中文",size=(8,1))],
]
windows = sg.Window("修改语言",layout=layout)
while 1:
event,values = windows.read()
print(event,"***")
if event == None:
windows.close()
break
elif event in ("确定","sure"):
# windows['User'].set_tooltip("哈哈哈哈哈")
windows["username_input"].SetTooltip("哈哈哈")
14.按钮元素
# 按钮元素的基本参数
pg.Button(button_text="",
Key=None,
tooltip=None, # 悬浮文本
disabled=False, # 元素禁用设定
image_filename=None, # 图片路径,按钮图片表示,和image_data二选一使用
image_data=None, # 图片base64格式,按钮用图片显示,和image_filename二选一使用
image_size=(None, None),
image_subsample=None, # 图片大小设定,为2时,原图片的二分之一大小:2=1/2, 3=1/3, 4=1/4, etc
border_width=None, # 按钮边界线设定
size=(None, None),
auto_size=None, # 按键上文本大小自动调节
button_color=("", ""), # 按键的颜色,前面是字体,后面是背景
disabled_button_color=None, # 按键禁用时显示的按钮颜色
font=None,
bind_return_key=False, # 绑定回车键,如果设定为True,回车键会使此元素被点击
focus=False,
pad=None)
]
# 按钮元素的更新方法:update
window[key].update()
window[key].Update()
# 获取base64格式文件的方法
import base64
f = open(r"文件路径", "rb")
res = f.read()
s = base64.b64encode(res)
f.close()
15.列表元素
# 列表元素使用方式
PySimpleGUI.Listbox(list)
PySimpleGUI.LB(list)
# 列表元素的参数
[pg.Listbox(list_A, size=(80, 40),
default_values=None, # 打开时默认选中的值或者列表
key=None,
select_mode=None, # 鼠标选择模式,有效值有4中:
# single, 单选,更换时点击选择
# multiple, 可以多选,逐一点击选择
# browse, 单选,鼠标按住也可以更换选择
# extended, 可以多选,鼠标按住也可以扩展选择
enable_events=False, # 列表元素的事件属性,如果为True,点击时会返回key
bind_return_key=True, # 绑定回车键,如果为True回车键按下时,相当于此元素被点击
disabled=False,
auto_size_text=True,
font=None,
no_scrollbar=False, # 如果为True,则没有滚动条
background_color="",
text_color="",
pad=None,
tooltip=None, # 悬浮文本
right_click_menu=None, # 右击调出菜单
visible=True
)]
# 列表元素更新方法
window[key].update()
window[key].Update()
# 列表元素可更新的元素
wd["None"].update(
values=None, # 元祖或者列表[1,2,]或(1,2,)
disabled=None, # 更新元素后是否被禁用
set_to_index=None, # 高亮显示设定的索引对应的列表值
scroll_to_index=None, # 将设定的索引跳到要显示的第一行
select_mode=None,
visible=None
)
# 示例
def test_list():
list1 = [i for i in range(1,11)]
layout = [
[sg.Text("标题",key="title")],
[sg.Text("姓名:",text_color="Pink",key="User"),sg.Input(key="username_input",text_color="Pink")],
[sg.Text("性别:",text_color="Pink",key="Sex"),sg.InputText(key="sex_input")],
[sg.Button("确定",key='sure',size=(8,1)), sg.Button("取消",key='cancel',size=(8,1)),sg.Button("英文",size=(8,1)),sg.Button("中文",size=(8,1))],
[sg.Listbox(list1,key='select1',select_mode='multiple',no_scrollbar=True)],
[sg.Button("单选",key="single"),sg.Button("多选",key="multiple")],
]
windows = sg.Window("修改语言",layout=layout)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event in ("确定","sure"):
print(value)
elif event == "单选":
windows['select1'].update(
select_mode="single", # 没生效,没有自动更新
values=None, # 没生效,没有自动更新
)
elif event == "多选":
windows['select1'].update(
select_mode="multiple", # 没生效,没有自动更新
value=None, # 没生效,没有自动更新
)
16.下拉菜单
# 下拉菜单使用方法
PySimpleGUI.Comno()
PySimpleGUI.InputComno()
PySimpleGUI.DropDown()
PySimpleGUI.Drop()
'''
此方法与上述列表元素的最大区别在于,该方法可以输入,但不能多选,而Listbox取得的值是存放在列表里面,但是Combo取得的值是对象本身。
'''
# 下拉菜单的参数
[pg.Drop(list_A,
size=(1, 2),
auto_size_text=True,
background_color="",
text_color="",
enable_events=False,
disabled=False,
pad=None,
tooltip=None,
readonly=False, # 元素只读属性,只能选择不能输入内容
font=None,
visible=True
)]
]
# 下拉菜单的更新
window[key].update()
window[key].Update()
# 下拉菜单可更新的参数
wd[A].update(value=None, # 更新默认选中的选项
values=None, # 更新显示的所有下拉菜单文本
set_to_index=None, # 高亮显示设定的索引的文本
disabled=None, # 更新元素的禁用状态
readonly=None, # 更新元素的只读状态
font=None,
visible=None
)
# 示例
def test_comno():
list1 = [i for i in range(1,11)]
layout = [
[sg.Text("标题",key="title")],
[sg.Text("姓名:",text_color="Pink",key="User"),sg.Input(key="username_input",text_color="Pink")],
[sg.Text("性别:",text_color="Pink",key="Sex"),sg.InputText(key="sex_input")],
[sg.Button("确定",key='sure',size=(8,1)), sg.Button("取消",key='cancel',size=(8,1)),sg.Button("英文",size=(8,1)),sg.Button("中文",size=(8,1))],
[sg.Drop(list1,text_color="Red",key="drop",size=(100,30))],
[sg.Button("更改下拉框可读属性")]
]
windows = sg.Window("修改语言",layout=layout)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event == "更改下拉框可读属性":
print(value)
windows['drop'].update(
readonly=True,
)
17.选择菜单和旋转按钮
# 选择菜单使用方法
PySimpleGUI.OptionMenu()
# 此元素和设置了只读属性的ComboBox很像,只是没有font、enable_events事件属性
# 选择菜单的参数
[pg.OptionMenu(list_A,
default_value=None, # 默认文本
key=None, # 唯一标识符
size=(None, None), # 元素的宽度和行高
disabled=False,
auto_size_text=False,
background_color="",
text_color="",
pad=None,
tooltip=None,
visible=True
)]
]
# 选择菜单的更新
wd[key].update()
# 选择菜单可更新的参数
wd["None"].update(value=None, # 结果设置为某一个固定值
values=None, # 修改可选的所有参数
disabled=None, # 是否可修改
visible=None) # 是否展示
# 示例
def test_optionmenu():
list1 = [i for i in range(1,11)]
layout = [
[sg.Text("标题",key="title")],
[sg.Text("姓名:",text_color="Pink",key="User"),sg.Input(key="username_input",text_color="Pink")],
[sg.Text("性别:",text_color="Pink",key="Sex"),sg.InputText(key="sex_input")],
[sg.Button("确定",key='sure',size=(8,1)), sg.Button("取消",key='cancel',size=(8,1)),sg.Button("英文",size=(8,1)),sg.Button("中文",size=(8,1))],
[sg.OptionMenu(list1,text_color="Red",key="drop",size=(100,30))],
[sg.Button("更改选择菜单可读属性")]
]
windows = sg.Window("修改语言",layout=layout)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event == "更改选择菜单可读属性":
print(value)
windows['drop'].update(
disabled=True,
)
18.单选框元素
# 单选框元素使用方法
PySimpleGUI.Radio("", group_id)
PySimpleGUI.R("", group_id)
group_id的意思就是,单选框元素只能有一个选择,选择这个,另一个就非选择状态
# 单选框元素更新
---window[key].update()
--window[key].ResetGroup() / window[key].reset_group() # reset_group:重置选择为空
# 同一个group_id的单选框,可以使用任意一个key对整个group进行重置操作
# 单选框属性,与其他基本一致,就多了一个group_id !!!!!!
# 单选框元素可更新的属性
wd["D"].update(value=None, # 为True是,此单选框被选中,同组其他更新为未选中、
text=None, # str 更新显示在按钮旁边的文本
background_color="",
text_color="",
disabled=None,
visible=None
)
# 获取返回值,返回值格式如下
value={'A': True, 'B': False, 'C': False, 'D': False}
# 示例
def test_radio():
list1 = [["A",1],["B",2],["C",3],["D",4]]
layout = [
[sg.Text("选择题,请选择正确答案:")],
[sg.Radio(i[1],group_id=1,key=i[0]) for i in list1],
[sg.Button("确定"),sg.Button("重选")]
]
windows = sg.Window("单选题",layout=layout)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event == "重选":
windows["A"].reset_group() # 同一个group_id的单选框,可以使用任意一个key对整个group进行重置操作
print(f"value={value}")
19.复选框元素
# 复选框方法
PySimpleGUI.Checkbox()
PySimpleGUI.CB()
# 复选框的更新方法
window[key].update()
# 复选框的属性
[pg.Checkbox(text="AA", # 选框旁边的数字
key="AA",
default=False, # 是否默认选中
size=(None, None),
auto_size_text=True,
font=None, # (str,int)字体类型和大小
background_color="",
text_color="",
enable_events=False,
pad=(None, None),
tooltip="",
visible=True)]
]
# 复选框可更新的属性
wd["AA"].update(value=None, # 更新选中状态,如果为True则选中,为False则清空
text=None,
background_color="",
text_color="",
disabled=None,
visible=None
)
# 返回的结果h值:
value={'A': True, 'B': True, 'C': False, 'D': False}
# 示例
def test_checkbox():
list1 = [["A", 1], ["B", 2], ["C", 3], ["D", 4]]
layout = [
[sg.Text("复选框测试,多选题")],
[sg.Checkbox(i[1],key=i[0],size=(10,3)) for i in list1], #text="AA",
[sg.Button("确定"),sg.Button("重置")],
]
windows = sg.Window("复选框",layout=layout)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event == "确定":
print(f"确定复选结果:{value}")
elif event == "重置":
for i in list1:
windows[i[0]].update(
value = False
)
print(f"value={value}")
20.滑块元素
# 滑块元素语法
PySimpleGUI.Slider()
# 滑块元素更新语法
window[key].update()
window[key].Update()
# 滑块元素的属性
[pg.Slider(range=(None, None), # 滑块的范围(最小值,最大值)
key=None, # 元素的唯一标识符
default_value=None, # 滑块初始所处的位置
tick_interval=None, # 刻度值标记
resolution=None, # 滑块移动的最小单位
orientation=None, # 方向设定,水平("h"/"horizontal")或者垂直("v"/"vertical")
disable_number_display=False, # 默认为false,如果为True,滑块旁的数字不显示
border_width=None, # 边界线宽度
relief=None # 浮雕设计,"raised"/"sunken"/"flat"/"ridge"/"solid/"groove"
)]
# 滑块元素可更新的属性
wd["None"].update(value=None,
range=(None, None),
disabled=None,
visible=None
)
# 示例
def test_slide():
layout = [
[sg.Text("滑块测试")],
[sg.Slider(key='slide1',orientation='horizontal')],
[sg.Button("滑块重置")]
]
windows = sg.Window("滑块测试",layout=layout)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event == "滑块重置":
windows["slide1"].update(
range=(1,100),
)
print(value)
21.图片元素
# 图片元素语法
PySimpleGUI.Image(filename="图片路径")
图片路径仅支持GIF和PNG
# 图片元素更新语法
window[key].update()
window[key].Update()
# 图片元素的属性
filename=None, # 图片路径仅支持GIF和PNG
data=None, # base64编码格式的字符串图片
background_color=None, # 背景颜色设定
size=(None, None), # 图片的宽度和高度
Pad=None,
tooltip=None,
right_click_menu=None,
visible=True
enable_events=False
# 图片元素可更新的属性
filename=None,
data=None,
size=(None, None),
visible=None
# 图片元素动图更新方法
window[key].update_animation(source,time_between_frames)
window[key].UpdateAnimation(source,time_between_frames)
其中,source就是包含动画的gif文件,或者base64编码的字符串,time_between_frames表示显示帧之间要等待的毫秒数
# 示例
def test_image():
layout = [
[sg.Text("图片测试")],
[sg.Image(filename=r"D:\LeStoreDownload\Wallpaper\1989-2023-01-11021542-1673417742682.png",key="Img1",size=(100,100))],
[sg.Button("切换图片")]
]
jpg_list = [
r"D:\LeStoreDownload\Wallpaper\1989-2023-01-11021542-1673417742682.png",
r"D:\LeStoreDownload\Wallpaper\8364-2023-01-11021402-1673417642121.png",
]
windows = sg.Window("图片检测",layout=layout)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event == "切换图片":
windows["Img1"].update(
filename=random.choice(jpg_list),
size=(200,200)
)
22.列元素
# 列元素语法
PySimpleGUI.Column()
PySimpleGUI.Col()
列元素是一个容器元素,用于在窗口的布局中创建布局。
# 列元素属性参数
layout = [[pg.Col( ,
background_color="",
size=None,
pad=None,
scrollable=True, # 如果True,则滚动条将添加到该列
vertical_scroll_only=True, # 如果为True,则不会显示水平滚动条
right_click_menu=None,
key=None,
visible=True,
justification="left", # 为列本身对齐方式
element_justification="Center", # 列内所有元素的对齐方式,"left","center","right"
vertical_alignment=None, # 垂直对齐方式,"top","bottom","center"
grab=True,
expand_x=None, # 如果为True.则列将自动沿x方向扩展以填充可用空间
expand_y=True, # 如果为True,则列将自动沿y方向扩展以填充可用空间
), pg.Col(layoutR)]]
# 示例
def test_col():
layoutL = [
[sg.T("左边")],
[sg.InputText()]
]
layoutR = [
[sg.B("确认", size=(80, 40))]
]
layout = [[sg.Col(layoutL), sg.Col(layoutR)]]
wd = sg.Window("GOOD", layout, grab_anywhere=True)
while True:
event, values = wd.read()
if event is None:
wd.close()
break
23.框架元素
# 框架元素语法
PySimpleGUI.Frame(title="",layout=layouya)
# 框架元素参数
layout = [[pg.Frame(title="",
layout=None, # 框架元素内的布局
background_color="",
title_color="",
title_location=None, # 标题所处位置:12个有效值 n(北)、nw(北西)、ne(北东)、
# e(东)、en(东北)、es(东南)
# s(南)、se(南东)、sw(南西)
# w(西)、ws(西南)、wn(西北)
relief="", # 浮雕设计,"raised"、"sunken"、"flat"、"groove"、"ridge"、"solid"
size=(None, None),
font=None,
pad=None,
border_width=10,
tooltip="",
right_click_menu=None,
visible=True,
element_justification="", # 框架内元素的对齐方式"left"/"right"/"center"
vertical_alignment=None, # 垂直对齐方式top/bottom/center
]]
# 框架元素更新语法
window[key].Update()
# 框架元素可更新属性
value=None
visible=None
# 示例
def test_frame():
layoutL = [
[sg.T("账号"), sg.InputText()],
[sg.T("密码"), sg.InputText()],
[sg.B("确认", key="A")]
]
layoutR = [
[sg.B("确认", size=(80, 40))]
]
layout = [
[sg.Frame("登录框",layout=layoutL,key="B"),sg.Frame("恭喜",layout=layoutR,key="C",visible=False)]
]
windows = sg.Window("Frame框架测试",layout=layout,grab_anywhere=True)
while 1:
event,value = windows.read()
if event == None:
windows.close()
break
elif event == "A":
windows['B'].update(visible=False)
windows['C'].update(visible=True)
24.标签元素
# 标签元素语法
PySimpleGUI.TabGroup([[sg.Tab("标题",布局),sg.Tab("标题",布局)]])
标签元素也是一种容器元素,里面可以放置各种元素及布局
# 标签元素的属性
layout = [
[pg.TabGroup([[pg.Tab("智驾设置", layoutL,
background_color="",
font="",
pad=None,
disabled=False,
border_width=None,
key="",
tooltip=None,
right_click_menu=None,
visible=True,
element_justification="", # 容器内元素的对齐方式left/right/center
), pg.Tab("CRC", layoutR)]])]
]
# 标签组的元素属性
layout = [
[pg.TabGroup([[pg.Tab("智驾设置", layoutL), pg.Tab("CRC", layoutR)]],
tab_location=None, # 标签标题所处的位置,有效值12个,left/right/top/bottom/lefttop/leftbottom
# righttop/bottomleft,bottomright,topleft/topright
title_color="", # 标题文本颜色(未选中时)
tab_background_color="", # 所有标签背景颜色(未选中)
selected_title_color="", # 标题文本颜色(中时)
selected_background_color="", # 所有标签背景颜色(未选中)
background_color="", # 标签标题所在空白区域的背景颜色
font=None,
enable_events=False,
pad=None,
border_width=None,
key="",
tooltip="",
visible=True
)]
]
# 可更新的属性参数
title=None
disabled=None
visible=None
# 示例
25.文件选择器
# 文件选择器语法
PySimpleGUI.FileBrowse()单文件
PySimpleGUI.FilesBrowse()多文件
# 文件选择器的属性
layout = [
[pg.FileBrowse(button_text="", # 按键显示文本
key="", # 记录路径的当行输入框的key,注意此key必须有对应的输入框
file_types=(("ALL Files", "*.*")), # 寻找文件时,只显示对应文件或者对应类型的文件
initial_folder=r"", # 默认路径设定
), pg.In()]
#
# 示例代码
Sg.theme("LightGreen3")
month_list = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']
day_abbreviations = ['日','一','二','三','四','五','六']
layout = [
[Sg.Text("选择数据日期"),Sg.Input(key="-date-"),
Sg.CalendarButton(button_text="日历选择器",key='-choose_date-',format="%Y-%m-%d",close_when_date_chosen=True,
month_names=month_list,day_abbreviations=day_abbreviations,begin_at_sunday_plus=1),
],
[Sg.Text("文件保存路径"),Sg.Input(key="-root_path-"),Sg.FolderBrowse(button_text="选择文件夹",target='-root_path-')],
[Sg.Button("确定",key='-sure-'),Sg.Button("退出",key='-exit-')]
]
windows = Sg.Window("企业微信通报自动处理",layout=layout,size=(900,900))
while 1:
event,value = windows.read()
if event in (None,"退出","-exit-"):
windows.close()
break
print(f"event={event}")
print(value)
26.文件夹选择器和文件另存为
# 文件夹选择器
PySimpleGUI.FolderBrowse()
layout = [
[pg.FolderBrowse(button_text="",
target="key", # 指定存放目录地址的元素key
initial_folder=None, # 设定默认路径
), pg.In()]
]
# 文件另存为
PySimpleGUI.FileSaveAs()
layout = [
[pg.FolderBrowse(button_text="",
target="key", # 指定存放目录地址的元素key
initial_folder=None, # 设定默认路径
), pg.In()],
[pg.FileSaveAs(button_text="",
target="key",
file_types=("ALL Files", "*.*"),)]
]
# 示例代码
27.颜色选择器
# 颜色选择器
PySImpleGUI.ColorChooserButton("button_text="")
# 属性
button_text=None
target=key
# 示例代码
28.日历选择器
# 日历选择器
PySimpleGUI.CalendarButton(button_text="")
# 属性参数
[pg.CalendarButton(button_text="日历选择器",
close_when_date_chosen=True, # 选择日期后关闭日历界面
default_date_m_d_y=(月份, 日期, 年份), # 设置默认打开日期后显示的日期
locale="", # 区域设定
format="%Y-%m-%d %H:%M:%S", # 设定显示的格式,可以给更换位置
begin_at_sunday_plus=0, # 设定日历显示第一天的星期Day
month_names=None, # 指定月份的列表
day_abbreviations=None, # 指定星期的列表
title="", # 选择窗口的标题
no_titlebar=False, # 不显示日期窗口的标题
location=(None, None) # 日历窗口的位置
)]]
# 示例代码
Sg.theme("LightGreen3")
month_list = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']
day_abbreviations = ['日','一','二','三','四','五','六']
layout = [
[Sg.Text("选择数据日期"),Sg.Input(key="-date-"),
Sg.CalendarButton(button_text="日历选择器",key='-choose_date-',format="%Y-%m-%d",close_when_date_chosen=True,
month_names=month_list,day_abbreviations=day_abbreviations,begin_at_sunday_plus=1),
],
[Sg.Text("文件保存路径"),Sg.Input(key="-root_path-"),Sg.FolderBrowse(button_text="选择文件夹",target='-root_path-')],
[Sg.Button("确定",key='-sure-'),Sg.Button("退出",key='-exit-')]
]
windows = Sg.Window("企业微信通报自动处理",layout=layout,size=(900,900))
while 1:
event,value = windows.read()
if event in (None,"退出","-exit-"):
windows.close()
break
print(f"event={event}")
print(value)
29.弹窗的设定
# 弹窗的语法
PySimpleGUI.popup()
# 属性参数
[pg.popup(title="", # 弹窗标题
button_color=None, # (文本颜色,背景颜色)
background_color="", # 弹窗的背景颜色
text_color="", # 弹窗上面的文本颜色
auto_close=False, # 弹窗是否自动关闭
auto_close_duration=None, # 弹窗自动关闭前需要显示的事件(以s为单位)
custom_text=(None, None), # 自定义窗口按钮上的文本,可以设定一个、两个
non_blocking=False, # 非租塞设定,如果为true,则弹窗不会影响程序下一步,否则需要等待用户输入
font=None,
no_titlebar=True, # 不显示标题栏
grab_anywhere=True,
keep_on_top=False, # 保持界面在屏幕的最前方
location=(None, None), # 设置弹窗的位置
any_key_closes=False, # 任意键关闭弹窗
image=None, # 显示图片(支出base64)
modal=True, # 模态窗口设定,除非关闭此窗口,否则不能操作其他界面
)]
]
# 弹窗的返回值
弹窗的返回值是根据所点击的按键来返回的,即按钮的名字,或者按键关闭激活后的按键名字
# 示例代码
30.弹窗输入框
# 语法
PySimpleGUI.PopupGetText()
# 弹窗输入框的返回值
PySimpleGUI.PopupGetText()返回的就是输入的值
# exit()直接退出主程序
# 示例代码
31.其他弹窗
1)文件夹选择弹窗:
PySimpleGUI.PopupGetFile() / PySimpleGUI.popup_get_file()
2)没有标题的弹窗,可以随意移动窗口:
PySimpleGUI.PopupGetFolder() / PySimpleGUI.popup_get_folder()
3)显示一段时间后自动关闭窗口:
PySimpleGUI.PopupAnnoying()
4)含有一个cannelled的按钮
PySimpleGUI.PopupCancel()
5)弹窗含有ok和cancel两个按钮
PySimpleGUI.PopupOKCancel()
6)含有一个颜色的Error按钮
PySimpleGUI.PopupError()
7)显示无按钮的弹窗
PySimpleGUI.PopupNoButtons()
8)闪现的弹窗
PySimpleGUI.PopupNoWait()
32.菜单栏
# 菜单栏的语法、书写方式
通过menu写菜单,在layout中加菜单即可
meun = [
["文件(&F)", ["保存", "!不可选", "---", "退出"]]
]
# 菜单栏的重点补充
meun = [
["文件(&F)", ["保存::保存", "!不可选", "---", "退出"]]
]
# 在对应选项旁边加::就可以指定key
[pg.Menu(meun, key="A", tearoff=True)],
# tearoff设置菜单栏是否可以独立出来
# 示例代码
33.windows属性
wd = PySimpleGUI.Window("GOOD", layout, grab_anywhere=True,
location=(None, None),
size=(None, None),
element_padding=((x,y),(m,n)), # 界面内所有元素的间隔
button_color=("",""), # 按键元素颜色统一设定,文本颜色,背景颜色
font="",
background_color="",
auto_close=False, # 界面自动关闭3s
auto_close_duration=x, # 默认界面自动关闭为3s
no_titlebar=False, # 是否需要窗口标题栏
keep_on_top=False, # 界面保持最前方
resizable=True, # 界面生成后,可以调整大小
disable_close=False, # 如果为True,窗口关闭按钮将不起作用
disable_minimize=False, # 如果为True,将不能最小化窗口
right_click_menu=None,
transparent_color=None, # 界面透明度设定
element_justification="left", # 元素对齐方式,"left"/"right"/"center"
)
34.多行文本框
# 语法
PySimpleGUI.ML()
# 属性
[pg.ML(default_text="", # 默认文本
disabled=True, # 禁用状态
border_width=None, # 边界线宽度设定
size=(x,y), # 宽度和行高设定
background_color=None,
text_color=None,
enable_events=True, # 设定后,点击元素会返回key
key="",
write_only=False, # 只写
reroute_stdout=False, # True时,print语句内容会显示在此文本框内
reroute_cprint=True, # 使用cprint将内容打印到此文本框内
reroute_stderr=False, # 步骤异常时,将文本写在此元素内,sys.stderr.write("")
autoscroll=True, # 更多数据添加到末尾时,元素的内容将自动滚动
focus=False,
font=None,
pad=None,
tooltip="",
justification=None, # 对齐方式设定
right_click_menu=None,
visible=True,
do_not_clear=True, # 窗口读取一次,内容就会自动清除
)],
# 可更新属性
wd["AAA"].update(value="",
disabled=None,
append=False, # 如果为True,要更新内容会接在原本文本下方,原来的不会消失
font=None,
text_color=None,
background_color=None,
text_color_for_value=None,
visible=None,
autoscroll=None,
justification=None,
)
# 关于cprint方法: PySimpleGUI.cprint() 、 PySimpleGUI.print()
[pg.cprint("", end=None, # 结束符,默认为回车键
sep=None, # 分隔符,默认为空格键
text_color=None,
background_color=None,
colors=None,
key=None,
justification="对齐方式"
)]
# 元素之间的垂直分隔线 PySimpleGUI.VerticalSeparator(color=None,key=None,pad)
# 示例代码
35.表格元素
# 语法
PySimpleGUI.Table()
# 属性
[sg.Table(headings=a, # 表格头部
max_col_width=None, # 所有列的最大宽度
auto_size_columns=False, # 是否自动适应列宽度
def_col_width=None, # 定义列表宽度
display_row_numbers=False, # 是否显示序列号
justification="l", # 对其方式
num_rows=10, # 定义行数
row_height=30, # 定义行高
key="",
font=("黑体", 10),
text_color=None,
background_color="red",
enable_events=True,
bind_return_key=True
)]
# 示例代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了