pySimpleGUI-学习篇
(0) 通用属性
""" 设定方法 """
key = '-Text-', # 元素唯一标识符,书写规范key='-NMAE-'。用于元素的定位
size = (None, None), # 元素宽度,行高(int,int)
font = None, # 设定字体名称,大小,font='宋体',font=('宋体', int) or font=['宋体',int]
auto_size_text = None, # 当设定值为True时,窗口自动适应文本大小
enable_events = None, # bool: 事件触发属性
relief = None, # 浮雕设计’raised‘, 'sunken', 'flat', 'ridge', 'solid', 'groove'
border_width = None, # 设定relief时,用来设定边界宽度
text_color = None, # 文本颜色
background_color = None, # 文本背景颜色
justification = None, # 对齐方式:'left', 'right', 'center'
pad = None, # 元素间隔设定 记住参数类型为int (左右,上下) or ( (左,右), (上,下) ) or 根据左边规则进行自由搭配
right_click_menu = ['1', ['1', '2', '3']],
# 右击调出菜单,List[ List[ Union[List[str],str] ] ] 设定后,右击此元素可以调出菜单
grab = None, # 如果为真,点此元素可以移动拖拽窗口
tooltip = None, # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
visible = True # bool: 元素可见状态
button_color = None, # 按键的颜色
disabled = False, # 元素禁用设定
""" 更新方法 """
value = '', # str : 更新输入框的文本
disabled = None, # bool : 更新元素的禁用状态
# 如果为True, 输入框变成只读状态,无法写入
select = None, # bool : 元素适中
# 如果为True, 输入框内的文本被全选中
# 和 focus 或者 set_focus 一起试着使用吧
visible = None, # bool : 更新元素的可见状态
text_color = None, # str : 更新输入框内的文本颜色
background_color = 'red', # str : 更新输入框的背景颜色
move_cursor_to = 'end' # 光标移动文本的最后
# 和 value, focus 一起试着使用吧
(1) 编写第一个界面
# 1)导入库
import PySimpleGUI as gui
# 2)定义布局,确定行数
page = [
[gui.Text('请输入您的基本信息')],
[gui.Text("姓名"), gui.InputText()],
[gui.Text("性别"), gui.InputText()],
[gui.Text("国籍"), gui.InputText()],
[gui.Button("确定"), gui.Button("取消")]
]
# 3)创建窗口
page_window = gui.Window('Py_GUI', page)
# 4)事件循环
while True:
event, values = page_window.read() # 窗口的读取,有两个返回值(1.事件 2.值)
if event == None: # 窗口关闭事件
break
# 5)关闭窗口
page_window.close()
""" 模板 """
# import PySimpleGUI as sg
#
# layout = [
# ...
# ]
#
# window = sg.Window('pySimpleGUI', layout)
#
# while True:
# event, values = window.read()
# print(event, values)
#
# if not event:
# break
#
# window.close()
(2) 定义窗口返回值|事件
""" 公用部分 """
# 1)导入库
import PySimpleGUI as gui
# 2)定义布局,确定行数
page = [
[gui.Text('请输入您的基本信息')],
[gui.Text("姓名"), gui.InputText()],
[gui.Text("性别"), gui.InputText()],
[gui.Text("国籍", enable_events=True), gui.InputText()],
[gui.Button("确定"), gui.Button("取消")]
]
# 3)创建窗口
page_window = gui.Window('Py_GUI', page)
""" 非公用部分 """
""" 方法一 """
# # 4)事件循环
# while True:
# event, values = page_window.read() # 窗口的读取,有两个返回值(1.事件 2.值)
# if event == None: # 窗口关闭事件
# break
# if event == "确定":
# gui.Popup('执行了确认任务') # popup 是弹窗的意思
# if event == "取消":
# gui.Popup("执行了取消")
#
# # 5)关闭窗口
# page_window.close()
""" 方法二 """
# # 4)事件循环
# while True:
# event, values = page_window.read() # 窗口的读取,有两个返回值(1.事件 2.值)
# if event == None: # 窗口关闭事件
# break
# if event in ("确定", "取消"):
# gui.Popup('执行完毕') # popup 是弹窗的意思
#
# # 5)关闭窗口
# page_window.close()
""" 方法三 """
# 4)事件循环
while True:
event, values = page_window.read() # 窗口的读取,有两个返回值(1.事件 2.值)
if event == None: # 窗口关闭事件
break
if event.startswith("确定"):
gui.Popup('执行确定') # popup 是弹窗的意思
if event.endswith("取消"):
gui.Popup('执行取消')
if event == '国籍':
gui.Popup('这是个文本,点了也没用')
# 5)关闭窗口
page_window.close()
(3) 从窗口读取返回值
""" 第一部分 """
# # 1)导入库
# import PySimpleGUI as gui
#
# # 2)定义布局,确定行数
# page = [
# [gui.Text('请输入您的基本信息')],
# [gui.Text("姓名"), gui.InputText()],
# [gui.Text("性别"), gui.InputText()],
# [gui.Text("国籍"), gui.InputText()],
# [gui.Button("确定"), gui.Button("取消")]
# ]
#
# # 3)创建窗口
# page_window = gui.Window('Py_GUI', page)
#
# # 4)事件循环
#
# while True:
# event, values = page_window.read() # 窗口的读取,有两个返回值(1.事件 2.值)
# if event == None: # 窗口关闭事件
# break
# if event == '确定':
# print(values)
# # 5)关闭窗口
# page_window.close()
""" 第二部分 """
# 1)导入库
import PySimpleGUI as gui
# 2)定义布局,确定行数
page = [
[gui.Text('请输入您的基本信息')],
[gui.Text("姓名"), gui.InputText(key='name')],
[gui.Text("性别"), gui.InputText(key='gender')],
[gui.Text("国籍"), gui.InputText(key='nationality')],
[gui.Button("确定"), gui.Button("取消")]
]
# 3)创建窗口
page_window = gui.Window('Py_GUI', page)
# 4)事件循环
while True:
event, values = page_window.read() # 窗口的读取,有两个返回值(1.事件 2.值)
if event == None: # 窗口关闭事件
break
if event == '确定':
print(values)
# 5)关闭窗口
page_window.close()
(4) 主题
import PySimpleGUI as psg
# 查看主题(这些主题是内置在库里面的):
# psg.theme_previewer()
# 获取所有’有效主题‘的一个列表,列表里面有主题的名称,可以将它复制下来
# print(psg.theme_list())
# 获取一个主题,并粗略地看看它的效果
# psg.theme("Black")
# psg.Popup("弹窗演示")
# 随机获取一个主题。可以到’运行台‘的中的最后一句,查看当前主题的名称
while True:
psg.theme('')
psg.Popup("弹窗演示")
if input(" q 退出").strip().lower() == 'q':
break
(5) 修改主题
import PySimpleGUI as psg
psg.theme('LightBlue2')
psg.Popup('演示弹窗', "请记住!当前按键字体‘OK’的颜色")
# print(psg.theme_button_color())
psg.theme_button_color(('yellow', '#7186C7'))
psg.Popup("演示弹窗", "按键字体‘OK’已经变黄色")
(6) 自定义窗口元素
""" for循环快速布局 """
# import PySimpleGUI as sg
#
# layout = [
# [sg.Text(i) for i in 'ABCD'],
# [[sg.Text(i)] for i in 'ABCD'],
# [sg.In(i) for i in ['北京', '上海', '广州', '深圳']], # In是InputText的缩写
# [[sg.In(i)] for i in ['北京', '上海', '广州', '深圳']]
# ]
# w = sg.Window('Py pySimpleGUI', layout)
# while True:
# event, values = w.read()
# if event == None:
# break
#
# w.close()
""" 另一种组合方式进行布局"""
import PySimpleGUI as sg
# 新式
# layout = [
# [sg.Text("请输入基本信息")],
#
# [sg.Text("姓名")] + [sg.In()]] + [
# [sg.Text("性别")] + [sg.In()]] + [
# [sg.Text("国籍")] + [sg.In()],
#
# [sg.B('确认'), sg.B('取消')] # B 是Button的缩写
# ]
# 传统
layout = [
[sg.Text("请输入基本信息")],
[sg.Text("姓名"), sg.In()], # 传统一
[sg.Text("性别")] + [sg.In()], # 传统二
[sg.Text("国籍")] + [sg.In()],
[sg.B('确认'), sg.B('取消')]
]
w = sg.Window('Py pySimpleGUI', layout)
while True:
event, values = w.read()
if event == None:
break
w.close()
(7) 文本元素的设定方法
import PySimpleGUI as sg
text = """
江南春
唐 杜牧
千里莺啼绿映红,
水村山郭酒旗风。
南朝四百八十寺,
多少楼台烟雨中。
"""
layout = [
[sg.Text(text,
key='-Text-', # 元素唯一标识符,书写规范key='-NMAE-'。用于元素的定位。
size=(30, 20), # 元素宽度,行高(int,int)
font=None, # 设定字体名称,大小,font='宋体',font=('宋体', int) or font=['宋体',int]
auto_size_text=None, # 当设定值为True时,窗口自动适应文本大小
enable_events=None, # bool: 事件属性,设定为True时,点击文本发生事件
relief=None, # 浮雕设计’raised‘, 'sunken', 'flat', 'ridge', 'solid', 'groove'
border_width=None, # 设定relief时,用来设定边界宽度
text_color=None, # 文本颜色
background_color=None, # 文本背景颜色
justification=None, # 对齐方式:'left', 'right', 'center'
pad=None, # 元素间隔设定 记住参数类型为int (左右,上下) or ( (左,右), (上,下) ) or 根据左边规则进行自由搭配
right_click_menu=['1', ['1', '2', '3']],
# 右击调出菜单,List[ List[ Union[List[str],str] ] ] 设定后,右击此元素可以调出菜单
grab=None, # 如果为真,点此元素可以移动拖拽窗口
tooltip=None, # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
visible=True # bool: 元素可见状态
)]
]
window = sg.Window("Test_GUI", layout)
while True:
event, values = window.read()
if event == None:
break
if event == '-Text-': # 这一段代码需要开启上面的enable_events
sg.popup('运行了一个点击事件')
window.close()
(8) 文本元素的更新方法
import PySimpleGUI as sg
layout = [
[sg.T('Hello World!', key='-Text-')],
[sg.T('Think you!', key='-Fun-')],
[sg.B('确定')]
]
window = sg.Window('hello', layout)
while True:
event, values = window.read()
print(event)
if event == None:
break
if event == '确定': # 当用户点击’确定‘按钮时,执行跟新文本
window['-Text-'].update(
value='谢谢', # str 更新文本
background_color='black', # 更新文本的背景颜色
text_color='red', # 更新文本颜色
font=('黑体', 30), # 更新字体的名称或者大小
visible=None # 更新元素的可见状态
)
window.close()
(9) 单行输入框元素的设定方法
import PySimpleGUI as sg
layout = [
[sg.T('账号:'), sg.In()],
[sg.T('密码:'), sg.In(
'请输入您的密码', # 默认值设定,可以为空字符串
key='-INPUT-', # 元素的唯一标识符 规范 key='-INPUT-'
size=(None, None), # 宽,行高
disabled=None, # bool: 元素禁用, 如果为True则禁用,用户无法输入任何值
password_char='', # 密码字符,一般设置为*
justification='l', # 对齐方式‘r’,‘l’,‘c’
background_color=None, # 输入框颜色
text_color=None, # 输入框的文本颜色
font=('宋体', 10), # 输入框字体的名称或者大小设定
tooltip='这是一个提示', # str: 悬浮文本
border_width=5, # 输入框边界线宽度设定
enable_events=False, # bool:输入框的事件属性
# 如果设定为True,输入值的时候会发生一个事件
do_not_clear=True, # bool: 输入框内容不被清空
# 如果为False, 该输入框内的值会被清除
focus=False, # bool: 设定焦点,如果为True,则光标显示在此输入框。
pad=None, # 元素间隔
disabled_readonly_background_color=None, # str: 元素禁用时的背景颜色设定
disabled_readonly_text_color=None, # str: 元素禁用时的文本颜色设定
right_click_menu=None, # 右击按钮菜单 List[ List[ Union[List[str], str] ] ]
# 设定后,右击此元素会调出菜单
visible=True, # 元素的可见状态,如果为False, 则界面不显示该元素
)]
]
window = sg.Window('Python pySimpleGUI', layout)
while True:
event, values = window.read()
print(event)
if not event:
break
window.close()
(10) 单行输入框的更新方法
import PySimpleGUI as sg
layout = [
[[sg.InputText(i, key=i)] for i in 'abcd'],
[sg.Button('确定'), sg.Button('取消')]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event)
if not event:
break
if event == '确定':
window['userDate.txt'].SetFocus() # 用于更新元素的焦点
window['userDate.txt'].SetTooltip('请输入XXX') # 用于更新悬浮文本
window['d'].update(
value='', # str : 更新输入框的文本
disabled=None, # bool : 更新元素的禁用状态
# 如果为True, 输入框变成只读状态,无法写入
select=None, # bool : 元素适中
# 如果为True, 输入框内的文本被全选中
# 和 focus 或者 set_focus 一起试着使用吧
visible=None, # bool : 更新元素的可见状态
text_color=None, # str : 更新输入框内的文本颜色
background_color='red', # str : 更新输入框的背景颜色
move_cursor_to='end' # 光标移动文本的最后
# 和 value, focus 一起试着使用吧
)
window.close()
(11) 按键元素的设定及更新方法
import PySimpleGUI as sg
# 按键元素的设定
layout = [
[sg.T('账号', size=(5, 1)), sg.In()],
[sg.T('密码', size=(5, 1)), sg.In()],
[sg.B('确认'), sg.B(
button_text="取消", # 显示在按钮上的文本
key='-CENCEL-', # 元素的唯一标识符
button_color=(None, None), # 按钮的 文本颜色 和 背景颜色
tooltip=None, # 悬浮文本
disabled=False, # 元素禁用设定,如果为True,点击按钮也无法发生事件
image_filename=None, # 图片路径,按钮用图片表示
# 只支持GIFs 和 PNGs 格式
# 和 image_data 二选一使用
image_data=None, # 图片 base64 格式,按钮用图片显示
# 和image_filename 二选一使用
# 如何获取 图片的 base64 格式?以下代码可以实现:
# import base64
# f = open('图片路径')
# res = f.read()
# s = base64.b64encode(res)
# print(s)
# f.close()
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_button=None, # 按钮上的文本自动调节
disabled_button_color=None, # 按钮元素禁用时显示的按钮颜色
font=None, # 字体名称,大小设定
bind_return_key=False, # 绑定回车键
# 如果设定为True, 回车键会使此元素被点击。
focus=False, # 焦点设置
pad=None, # 和其他元素之间间隔设定
visible=True, # 元素的可见状态设定
# 如果为True,元素则不可见
)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
if not event:
break
# 按键元素的更新方法
window['-CENCEL-'].update(
text=None, # 按钮上显示的文本
button_color=(None, None), # 按钮的 文本颜色 和 背景颜色
disabled=None, # 元素禁用设定
image_data=None, # 图片的 base64 格式
image_filename=None, # 图片的路径
visible=None, # 元素可见状态设定
image_subsample=None, # 元素大小设定
disabled_button_color=(None, None), # 元素禁用时显示的文本和按钮颜色
image_size=None # 图片尺寸设定
)
window.close()
(12) 列表元素的设定方法
import PySimpleGUI as sg
elist = ['python', 'java', 'c++', 'php', 'html']
""" sg.Listbox(elist, size=(None, None) 可以缩写成 sg.LB(elist, size=(None, None))"""
layout = [
[sg.Listbox(elist,
default_values="java", # 默认选中的值或者列表【比如现在进入默认选择java这一行】
key='-LB-', # 元素的唯一标识符
select_mode=None, # 选择模式,有效值包含如下4种
# single , 单选,更换时点击选择
# multiple , 可以多选,逐一点击选择
# browse , 单选,鼠标按住也可以更换选择
# extended , 可以多选,鼠标按住也可以扩展选择
enable_events=True, # 元素的事件属性
# 如果设定为True, 元素列表项目被选中时会发生事件
bind_return_key=False, # 绑定回车键
# 如果设定为True, 回车键被按下时相当于此元素被点击
size=(30, 6), # 字符宽度,行高
disabled=False, # 元素是否禁用
auto_size_text=None, # 如果为True, 元素自动根据内容大小调整
font=None, # 设置字体名称或者大小
no_scrollbar=False, # 如果为True, 则没有滚动条
background_color=None, # 背景颜色设定
text_color=None, # 字体颜色设定
pad=None, # 元素间隔设定
tooltip=None, # 悬浮文本
right_click_menu=None, # 右击调出菜单
visible=True # 元素可见状态设定
)]
]
window = sg.Window("pySimpleGUI", layout)
while True:
event, values = window.read()
print(event)
if not event:
break
window.close()
(13) 列表元素的更新方法
"""
方法:window[key].update()
可以更新的属性和参数1
values=None, 就是默认显示的列表或元组内容
# 可以用 values=... 更新元组或者列表,列举如下
# e_tuple = (1, 3)
# e_list = [1, 3]
# values = e_tuple
# values = e_list
disabled=None,
# bool: 更新元素是否禁用,举例如下
# disabled=True
# disabled=Fales
set_to_index=None,
# 高亮显示设置的索引,Union[int, list, tuple], 列举如下
select_mode=None
# 更新元素的选择模式,有效值包含如下4种
# single , 单选,更换时点击选择
# multiple , 可以多选,鼠标按住也可以扩展选择
visible=None
# bool:更新元素的可见状态
# visible=True
# visible=False
"""
import PySimpleGUI as sg
list1 = ['Python', 'html', 'php', 'avp', 'mml', 'fjl', 'tho', 'Java', 'c++']
list2 = ['小明同学', '小叶同学', '小花同学', '小美同学', '小壮同学']
layout = [
[sg.T('信息界面', size=(8, 1))],
[sg.LB(list1, key='-list-', size=(30, 2))],
[sg.B('编程语言'), sg.B('程序员')],
[sg.B("高亮显示"), sg.B("跳转到Java")]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event)
key = '-list-'
if not event:
break
if event == '程序员':
window[key].update(values=list2)
if event == '编程语言':
window[key].update(values=list1)
if event == "高亮显示":
window[key].update(set_to_index=0)
# 获取被高亮显示的对象
print(window[key].get())
if event == "跳转到Java":
window[key].update(scroll_to_index=8)
print(window[key])
window.close()
(14) 下拉菜单的设定方法
"""
下拉菜单的书写方法
sg.Combo()
or
sg.InputCombo()
or
sg.DropDown()
or
sg.Drop()
Combo 和 Listbox 最大的区别在于,前者可以输入,但是不能多选,
Listbox 取得的值是存放在列表里面的,但是 Combo 取得的值是对象本身
"""
import PySimpleGUI as sg
list1 = ['Python', 'Java', 'C', 'c++', 'Gui']
list2 = ['小明', '小王', '小花', '小壮', '小美']
layout = [
[sg.Drop(list1,
default_value='Java', # 默认选中的值或者列表【比如现在进入默认选择Java这一行】
key=None, # 元素的唯一标识符
size=(30, 6), # 字符宽度,行高
auto_size_text=None, # 如果为True, 元素自动根据内容大小调整
background_color=None, # 背景颜色设定
text_color=None, # 字体颜色设定
enable_events=True, # 元素的事件属性,如果设定为True, 元素列表项目被选中时会发生事件
disabled=False, # 元素是否禁用
pad=None, # 元素间隔设定
tooltip=None, # str : 悬浮文本设定
readonly=False, # 元素只读属性,只能选择,不能输入内容
font=None, # 元素字体名称或者大小设定
bind_return_key=False, # 绑定回车键
# 如果设定为True, 回车键被按下时相当于此元素被点击
visible=True, # 元素可见设定状态
)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(15) 下拉菜单的更新方法
import PySimpleGUI as sg
list1 = ['Python', 'Java', 'C', 'c++', 'Gui']
list2 = ['小明', '小王', '小花', '小壮', '小美']
layout = [
[sg.Drop(list1,
default_value='Python',
key='-list1-',
size=(30, 6),
enable_events=True
)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == '-list1-':
list3 = [1, 2, 3, 4, 5]
window['-list1-'].update(
value=None, # 更新默认选项中的选项
values=list3, # 更新显示的所有下拉菜单文本
set_to_index=None, # 高亮显示设定的索引的文本
disabled=None, # 更新元素的禁用状态
readonly=None, # 更新元素是否只读
font=None, # 更新元素的字体名称或者大小
visible=None # 定义元素为不可见
)
window.close()
(16) 选择菜单和选择按钮
""" 选择菜单 """
# 书写方法:sg.OptionMenu()
# 此元素和设置了只读属性的ComboBox很像。
# 它没有’font‘属性,不可以设定字体样式和大小
# 没有’enable_events‘事件属性,不可以触发事件
""" 选择菜单可设定的属性 """
# default_value=None, 默认文本
# key=None, 唯一标识符
# size=(None, None), 元素的宽度和行高
# disabled=False, 更新元素的禁用状态
# auto_size_text=None, 元素根据文本自动调节
# background_color=None, 背景颜色设定
# text_color=None, 文本颜色设定
# pad=None, 元素间隔设定
# tooltip=None, str : 悬浮文本设定
# visible=True, 元素可见状态设定
""" 选择菜单可更新的属性 """
# value=None, 更新默认选中的元素
# values=None, 更新所有显示的文本选项
# disabled=None, 更新元素的禁用状态
# visible=None, 更新元素的可见状态
""" 旋转按钮 """
# 书写方法:sg.Spin()
# 特征:含有向上向下两个箭头按钮
""" 旋转按钮可设定的属性 """
# initial_value=None, 默认显示选项
# key=None, 唯一标识符
# disabled=False, 更新元素的禁用状态
# enable_events=False, 事件属性
# size=(None, None), 元素的宽度和行高
# auto_size_text=None, 元素根据文本自动调节
# font=None, 字体的样式和大小
# background_color=None, 背景颜色
# text_color=None, 文本颜色
# pad=None, 元素间隔设定
# tooltip=None, 悬浮文本设定
# visible=True, 元素可见状态设定
""" 旋转按钮可更新的属性 """
# value=None, 更新默认选中的元素
# values=None, 更新所有显示的文本选项
# disabled=None, 更新元素的禁用状态
# visible=None, 更新元素的可见状态
import PySimpleGUI as sg
a = ['python', 'java', 'c++', 'php', 'html']
layout = [
[sg.T('选择菜单'), sg.OptionMenu(a, key='-OM-'), # 注意:选择菜单没有’触发事件属性‘,不能写 enable_events=...
sg.T('Sgin'), sg.Spin(list(range(10)), key='-SP-', enable_events=True)],
[sg.T("语言"), sg.In(key='-YY-', size=(25))]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == '-SP-':
window['-YY-'].update(values['-SP-'])
window.close()
(17) 单选框的多种布局方式
""" 单选框的书写方法 """
# sg.Radio() or sg.R
""" For循环快速定义单选框 """
# 1) 从左向右
# layout = [[], [], [() for]]
# layout = [[]] + [[]] + [[() for]]
# 2) 从上到下
# layout = [[]] + [[]] + [[] for]
# 3) 同时进行‘从左向右’和‘从上到下’
# layout = [[sg.R(i, group_id=j) for i in list1] for j in range(9)]
import PySimpleGUI as sg
list1 = ['非常满意', '满意', '一般', '不满意']
list2 = ['请对我做出评价:', '请对您做出评价:']
''' 从左到右 '''
# 1.传统的布局方式:
# layout = [
# [sg.T('1.' + list2[0])],
# [sg.R(i, group_id=1) for i in list1], # group_id=1 意思是:分为第1组
# [sg.T('2.' + list2[1])],
# [sg.R(i, group_id=2) for i in list1] # group_id=1 意思是:分为第2组
#
# ]
# 2.拼接方式:
# layout = [[sg.T('1.' + list2[0])]] + \
# [[sg.R(i, group_id=1) for i in list1]] + \
# [[sg.T('2.' + list2[1])]] + \
# [[sg.R(i, group_id=2) for i in list1]]
''' 从上到下 '''
# layout = [
# [[sg.R(i, group_id=1)] for i in list1]
# ]
layout = [[sg.R(i, group_id=j) for i in list1] for j in range(9)]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(18) 单选框属性的设定及更新方法
" 单选框属性的设定及更新方法 "
# 设定方法:
# sg.R(list, size=(None, None))
#
# 更新方法
# window[key].update()
#
# 相同组ID的单选框都更新为未选中状态:
# window[key].ResetGroup()
# window[key].reset_group()
import PySimpleGUI as sg
list1 = ['非常满意', '满意', '一般', '不满意']
layout = [
[sg.T('1.XXX')],
[sg.R(i, group_id=1, key=i) for i in list1],
[sg.B('确认提交')]
]
"""
单选框可设定的一些属性:
text, # str 文本用于显示在单选框旁边
group_id, # any # 组ID
key=None, # 元素的唯一标识符
default=False, # bool如果为True,则默认选中
disabled=False, # 元素是否禁用
size=(30, 6), # 字符宽度,行高
auto_size_text=None, # 如果为True, 元素自动根据内容大小调整
background_color=None, # 背景颜色设定
text_color=None, # 字体颜色设定
font=None, # 元素字体名称或者大小设定
pad=None, # 元素间隔设定
tooltip=None, # str : 悬浮文本设定
enable_events=True, # 元素的事件属性,如果设定为True, 元素列表项目被选中时会发生事件
visible=True, # 元素可见设定状态
"""
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == '确认提交':
# window['满意'].reset_group() # '相同组ID'!!的单选框都更新为未选中状态
# window['满意'].update(value=True)
# 通过判断窗口返回值中的values字典里面用户的选择信息,来获取对应的内容
for k, v in values.items(): # items()函数:将字典里面的(键,值)转换为元组
if v:
print(k)
break
"""
单选框可更新的一些属性:
value=None, # 为True时,此单选框被选中,同组的其他选框更新为未选中
# bool 如果为True, 则选中,如果为False,则清空选中状态
text=None, # srt 更新显示在按钮旁边的文本
background_color=None, # 更新背景颜色
text_color=None, # 更新文本颜色
disabled=None, # 更新元素的禁用状态
visible=None # 定义元素为不可见
"""
window.close()
(19) 复选框的设定及更新方法
"""多选框可设定的一些属性:"""
# text, # str 文本用于显示在单选框旁边
# default=False, # bool如果为True,则默认选中
# size=(30, 6), # 字符宽度,行高
# auto_size_text=None, # 如果为True, 元素自动根据内容大小调整
# font=None, # 元素字体名称或者大小设定
# background_color=None, # 背景颜色设定
# text_color=None, # 字体颜色设定
# enable_events=True,
# # 元素的事件属性,如果设定为True, 元素列表项目被选中时会发生事件
# disabled=False, # 元素是否禁用
# key=None, # 元素的唯一标识符
# pad=None, # 元素间隔设定
# tooltip=None, # str : 悬浮文本设定
# visible=True, # 元素可见设定状态
"""多选框可更新的一些属性:"""
# value = None, # 为True时,此单选框被选中,同组的其他选框更新为未选中
# # bool 如果为True, 则选中,如果为False,则清空选中状态
# text = None, # srt 更新显示在按钮旁边的文本
# background_color = None, # 更新背景颜色
# text_color = None, # 更新文本颜色
# disabled = None, # 更新元素的禁用状态
# visible = None # 定义元素为不可见
(20) 滑块元素的书写及设定方法
import PySimpleGUI as sg
layout = [
[sg.Slider(
range=(100, 500), # 滑块范围(最大值,最小值)
key=None,
default_value=None, # 滑块初始所处位置
resolution=None, # 滑块变动的最小单位值
tick_interval=50, # 显示刻度值
orientation=None, # 方向设定 水平方向或者垂直方向
# 有效值 'horizontal' or 'vertical'
# 支持简写:'h' or 'v'
disable_number_display=False,
# 默认为False,如果为True,滑块旁的数字不显示
border_width=None, # 边界线宽度
relief=None, # 浮雕设计’raised‘, 'sunken', 'flat', 'ridge', 'solid', 'groove'
enable_events=False, # 元素的事件属性
disabled=False, # 元素禁用状态设定
size=(None, None), # 元素的尺寸设定 宽度和行高
font=None, # 字体名称和大小设定
background_color='grey', # 滑块背景颜色设定
text_color='pink', # 元素文本颜色设定
pad=None, # 元素间隔设定((int, int),(int , int))
tooltip=None, # 元素悬浮文本设定
visible=True, # 元素可见状态设定
)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(21) 滑块元素的更新方法
# win[key].update()
# value = None, # int or float 更新滑块初始所处位置
# range = (None, None), # (int, int) or (float, float) 滑块范围
# disabled = None, # bool 元素的禁用状态
# visible = None, # bool 元素是否显示
(22) 图片元素的多种书写方式
""" 图片元素的书写方法 """
# 书写方法:sg.Image(filename='图片路径')
# 图片路径仅支持GIF和PNG
import PySimpleGUI as sg
img = r'C:\Users\叶寻\Desktop\Python\picture'
layout = [
[sg.Image(filename=img + fr'\p{n}.png') for n in range(1, 4)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(23) 图片元素的设定及更新方法
import PySimpleGUI as sg
# 方法一:导入图片位置
# img = r'C:\Users\叶寻\Desktop\Python\picture'
# 方法二:将’图片信息‘保存到当前编辑器(粗暴方法,哈哈)
pic1 = 'ADAFBMVEVHcExSQjQtP01pdXcxSlw...'
pic2 = 'QjQtaP01pdXcxSQjQtPgc01pdXcxS...'
pic3 = 'HJvZmlsZQAASA2lsZQAASA2dlnkWh...'
# 动图的演示:
pic_gif = sg.DEFAULT_BASE64_LOADING_GIF
# 方法一的操作:
# layout = [
# [sg.Image(
# filename=img + fr'\p{n}.png',
#
# data=None, # base64编码的字符串
# background_color=None, # 背景颜色设定
# size=(100, 100), # 图片 宽度和高度设定(pix)
# pad=None, # 和周围元素间的间隔((左,右),(上,下))
# key='-PK-', # 元素的唯一标识符
# tooltip=None, # 元素的悬浮文本
# right_click_menu=None, # 右击调出菜单
# visible=True, # 元素可见状态 bool
# enable_events=False, # 元素事件属性,默认False
#
# ) for n in range(1, 4)]
#
# ]
# 方法二的操作:
# layout = [
# [sg.Image(data=pic1), sg.Image(data=pic2), sg.Image(data=pic3)]
# ]
# 动图的演示:
layout = [
[sg.Image(data=pic_gif, key='-GIF-')] # 只做这一步,图是不会动的!还要做下面的两步:(1)和(2)
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read(timeout=10) # (1)做一个超时毫秒的设定:即在window.read()里面写:timeout=10 (即10毫秒)
window['-GIF-'].update_animation(source=pic_gif, time_between_frames=200)
# print(event, values)
if not event:
break
if event == '-PK-':
window['-Pk-'].update(
filename=None, # 更新图片路径
data=None, # 更新元素base64编码字符串
size=(None, None), # 更新图片的宽度和高度设定(pix)
visible=None, # 更新元素的可见状态
)
window.close()
""" 补充: 图片元素的动图更新方法 """
# window[key].update_animation()
# window[key].UpdateAnimation()
# 动图可更新的属性
# source # 包含动画GIF的文件名或Base64编码的字符串
# time_between_frames=0 # 显示帧之间要等待的毫秒数
(24) 列元素的书写及设定方法
# 列元素的书写方法
# sg.Column() or sg.Col()
# 一个容器元素,用于在窗口的布局中创建布局
import PySimpleGUI as sg
layoutL = [
[sg.Text("标题")],
[sg.InputText('请输入文章标题')],
[sg.Text("作者")],
[sg.InputText('请输入姓名或笔名')]
]
layoutR = [
[sg.Multiline("请输入正文内容", size=(30, 20))], # Multiline 可以缩写成 ML
[sg.Button('确认提交')],
]
layout = [
[sg.Col(layoutL),
sg.Col(layoutR,
background_color='yellow', # 整个列元素的背景颜色
size=(None, None), # 宽度 高度 以像素为单位的尺寸
# 偶尔不工作
pad=None, # 与周围元素间的间隔设定, 左右上下
scrollable=False, # 如果为True, 则滚动条添加到该列
vertical_scroll_only=False, # 如果为True, 则不会显示水平滚动条
right_click_menu=None, # 右击调出菜单
key=None, # 元素的唯一标识符
visible=True, # 元素的可见状态设定
justification="left", # 列本身设置对齐方式
element_justification="left",
# 列内所有元素的对齐方式
# 有效值为 left, center, right
vertical_alignment=None,
# 垂直对齐方式
# 有效值为top, bottom, center
grab=None, # 如果设定为True,可以拖拽此元素移动窗口
expand_x=None, # 如果为True,则列将自动沿X方向扩展以填充可用空间
expand_y=None, # 如果为True,则列将自动沿Y方向扩展以填充可用空间
)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(25) 框架元素的书写及设定方法
import PySimpleGUI as sg
aaa = [
[sg.Text("账号"), sg.InputText()],
[sg.Text("密码"), sg.InputText()]
]
layout = [
[sg.Frame(
title='登录框哦哦哦~~',
layout=aaa,
key=None, # 框架元素的唯一标识符
tooltip=None, # 悬浮文本
right_click_menu=None, # 右击调出菜单
visible=True, # 元素可见状态设定
title_color='red', # 标题文本颜色设定
background_color='black', # # 框架元素背景颜色
title_location=None,
# 标题所处位置
# 有效值有12种(ewsn,东西南北)
# n北,nw北西, ne, e, en, es, s, se, sw, w, ws, wn
# (注意:北西 不等于 西北)
# 默认为 nw北西
relief='flat',
# 浮雕设计 和其他元素的有效值是一样的
# raised, sunken, flat, groove, ridge, solid
size=(None, None),
# 元素的宽度和行高
# 偶尔不起作用
font=None,
# 可以设置字体名称,大小等等
pad=None,
# 和周围元素间隔的设定((left, right),(top, bottom))
border_width=10,
# 框架元素的线条宽度
element_justification='left',
# 框架内所有元素的对齐方式
# 有效值 left, right, center
vertical_alignment=None,
# 垂直对齐方式
# top bottom center
# 支持首字母简写
)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(26) 通过框架元素的更新实现界面切换
# 框架元素的更新
# window[key].Update(visible=None)
# 可更新的属性
# value=None, 框架元素的标题
# visible=None, 元素的可见状态
import PySimpleGUI as sg
elist = ['资料1', '资料2', '资料3', '资料4', ]
layout_e = [
[sg.Listbox(elist, size=(20, 5))]
]
aaa = [
[sg.Text("账号"), sg.InputText()],
[sg.Text("密码"), sg.InputText()],
[sg.Button("确认"), sg.Button("退出")]
]
layout = [
[sg.Frame(title='登录框~~', layout=aaa, key='-DL-'),
sg.Frame(title='列表质料', layout=layout_e, key='-LB-', visible=False)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == '确认':
window['-LB-'].update(visible=True)
window['-DL-'].update(visible=False)
if event == '退出':
sg.popup('确定退出?')
break
window.close()
(27) 标签元素的讲解及练习
# 标签元素,也是一种容器元素,里面可以放置各种元素及布局
# 优点在于切界更为简便
# 书写方式与别的元素稍有不同,具体如下
import PySimpleGUI as sg
lista = ['苹果', '香蕉', '雪梨', '西瓜']
listb = ['白菜', '芥菜', '包菜', '生菜']
layout_a = [[sg.Listbox(lista, size=(50, 5))]]
layout_b = [[sg.Listbox(listb, size=(50, 5))]]
layout = [
[sg.TabGroup(
[
[sg.Tab("水果类", layout_a,
# <单个标签元素的可设定的属性>
background_color=None, # 标签的背景颜色设定
font=None, # 字体名称 大小设定
pad=None, # 周围元素的间隔设定
disabled=False, # 禁用状态设定
border_width=None, # 边界线宽度设定
key='-F-', # 元素的唯一标识符
tooltip=None, # 悬浮文本设定
right_click_menu=None, # 右击调出菜单
visible=True, # 元素可见状态设定
element_justification='left', # 容器内元素的对齐方式.有效值 left, right, center
), sg.Tab("蔬菜类", layout_b)]],
# <整个标签元素的可设定的属性>
# layout=??, # 标签组内的tab布局,注意sg.Tab()要写在第一行
# tab_location=None, # 标签标题所处的位置
# 有效值有12个,分别为left, right, top, bottom, lefttop,leftbottom
# righttop, rightbottom, bottomleft, bottomright, topleft, topright
# title_color=None # 标题文本颜色(未选中时)
# tab_background_color=None, # 所有标签背景颜色
# selected_title_color=None, # 选中时标题文本颜色
# selected_background_color=None, # 选中时标签背景颜色
# background_color=None, # 标签标题所在空白区域的背景颜色
# font=None, # 字体名称,大小设定
# enable_events=False, # 元素的事件属性, 切换标签元素就会发生事件
# pad=None, # 周围元素的间隔设定
# border_width=None, # 边界线宽度设定
# key=None, # 元素的唯一标识符
# tooltip=None, # 悬浮文本设定
# visible=True, # 元素可见状态设定
)
]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == '水果类':
window['-F-'].update(
# 可更新的属性:
title=None, # 标签标题文本的更新
disabled=None, # 禁用状态的更新
visible=None, # 可见状态的更新
)
window.close()
(28) 编写一个文件选择器
import PySimpleGUI as sg
# 选择单个文件:用 FileBrowse
# 选择多个文件:用 FilesBrowse
layout = [
[sg.FileBrowse(target='-B-', file_types=(("ALL Files", '*.*'),))],
[sg.InputText(key='-A-'), sg.InputText(key='-B-')]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
"""
button_text = "选择", # 按钮元素上要显示的文本
target = None, # 将要显示路径,显示到指定的key的输入框中---InputText
file_types = (("ALL Files", '*.*'),),
# 只显示指定的文件类型 '*.png'
# 只显示指定的文件名称 'text.*'
# 例:
# '*.*' --> 显示全部类型文件
# '*.png' --> 只显示png类型的文件
# 'pic.*' --> 只显示名字为pic的文件
initial_folder = None, # 默认路径设定
# _______________________________________________
# 通用
tooltip = None, # str: 悬浮文本,当光标置于该元素上方,会显示设定的文本
size = (None, None), # 元素宽度,行高(int,int)
auto_size_text = None, # 当设定值为True时,窗口自动适应文本大小
button_color = None, # 按键的颜色
enable_events = None, # bool: 事件触发属性
font = None, # 设定字体名称,大小,font='宋体',font=('宋体', int) or font=['宋体',int]
disabled = False, # 元素禁用设定
pad = None, # 元素间隔设定 记住参数类型为int (左右,上下) or ( (左,右), (上,下) ) or 根据左边规则进行自由搭配
key = '-Text-', # 元素唯一标识符,书写规范key='-NMAE-'。用于元素的定位
visible = True # bool: 元素可见状态
"""
(29) 文件夹选择器与文件另存为
# 文件夹选择器的书写方法:
# sg.FolderBrowse()
# 文件另存为的书写方法:
# sg.FileSaveAs()
"""
button_text = "选择", # 按钮元素上要显示的文本
target = key, # 将要显示路径,显示到指定的key的输入框中---InputText
file_types = (("ALL Files", '*.*'),),
# 只显示指定的文件类型 '*.png'
# 只显示指定的文件名称 'text.*'
initial_folder = None, # 默认路径设定
"""
import PySimpleGUI as sg
layout = [
[sg.FileBrowse(button_text="选择文件", size=(8, 1)), sg.InputText(size=(20, 1))],
[sg.FolderBrowse(button_text="选择文件夹", size=(8, 1)), sg.InputText(size=(20, 1))],
[sg.FileSaveAs(button_text="另存为", size=(8, 1)), sg.InputText(size=(20, 1))]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(30) 颜色选择器和日历选择器
import PySimpleGUI as sg
# 1月~12月 的列表
chinese_month_list = []
for i in range(1, 13):
chinese_month_list.append(f'{i}月')
# 周:
chinese_week_list = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
layout = [
[sg.ColorChooserButton(button_text='颜色选择器'), sg.InputText()],
[sg.CalendarButton(button_text='日历选择器', day_abbreviations=chinese_week_list), sg.InputText()]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
# 属性设定:
# 通用属性省略
# 颜色选择器的属性
# button_text = '颜色选择器', # 按钮元素要显示的文本
# target = key, # 显示颜色码的目标元素的key
# 日历选择器
# button_text = '日历选择器', # 按钮元素上显示的文本
# target = key, # 选择的日期要显示的位置
close_when_date_chosen = True, # 选择日期后 日历界面关闭
default_date_m_d_y = (None, None, None), # 打开界面,默认显示的日期设定
locale = None, # 区域设定,西班牙:es
format = "%Y-%m-%d %H:%M:%S", # 显示的格式
begin_at_sunday_plus = 0, # 指定日历显示的第一列 (例:索引0:周日 索引1:周一 ...)
month_names = None, # 指定月份的文本列表, 比如日历默认是英文,自己写个中文的赋值给它即可实现‘中文日历’
# 可以试试将 chinese_month_list 带入
day_abbreviations = None, # 指定周几的文本列表
# 可以试试将 chinese_week_list 带入
title = "日历", # 选择窗口的标题
no_titlebar = False, # 不显示标题
location = (None, None), # 日历窗口在电脑屏幕上的位置,x轴y轴
(31) 关于弹窗的各种设定
import PySimpleGUI as sg
# popup是有返回值的
return_sth = sg.popup('能力越大', '责任越大', '哈' * 20,
no_titlebar=False, # 不显示标题栏(非常好的一个属性)
grab_anywhere=True, # 如果为True,拖拽界面进行移动
keep_on_top=False, # 如果为True,保持界面在屏幕的最前方
title='弹窗显示', # 弹窗标题,如果未设定,默认显示可变参数的第一个文本作为标题
button_color=('red', 'black'), # (文本颜色, 背景颜色)
background_color='black', # 弹窗的背景颜色
text_color='red', # 弹窗上面的文本颜色
auto_close=False, # 如果为True,弹窗会自动关闭界面,一般配合下面的使用
auto_close_duration=None, # 自动关闭窗口之前界面持续的时间(以秒为单位),一般配合上面的使用
custom_text=('yes', 'no'), # 自定义按钮上要显示的文本,可以设定一个或者两个
non_blocking=False, # 非阻塞设定,如果为True,立即执行下一步,不需要等待用户输入
font=None, # 字体大小,名称设定
location=(None, None), # 界面出现的位置
any_key_closes=False,
# 如果为True, 敲打任意键会关闭窗口
# 如果为False, 只用X按钮关闭窗口,以及回车键才会关闭窗口
image=None, # 显示图片(支持base64)
modal=True, # 模拟窗口设定,除非关闭此窗口,否则其他界面不能操作
)
# 打印popup返回值
print(return_sth)
(32) 弹窗之PopupGetText
import PySimpleGUI as sg
print(sg.PopupGetText('密码输入框', password_char='*'))
(33) 各种不同特征的弹窗
import PySimpleGUI as sg
# 文件选择弹窗
sg.PopupGetFile('请选择一个文件') or sg.popup_get_file('请...')
# 文件夹选择弹窗
sg.PopupGetFolder('请...') or sg.popup_get_folder('请...')
# 没有标题栏的弹窗,可以随意移动窗口
sg.PopupAnnoying()
# 显示一段时间后自动关闭窗口
sg.PopupAutoClose()
# 含有一个Cancelled的按钮
sg.PopupCancel()
# 弹窗含有OK和Canceld两个按钮
sg.PopupOKCancel()
# 含有一个带有颜色的Error按钮
sg.PopupError()
# 显示无按钮的弹窗
sg.PopupNoButtons()
# 显示弹窗窗口并立即返回
sg.PopupNoWait()
(34) 菜单栏的设定方法
import PySimpleGUI as sg
menu = [
['文件(&F)', ['新建', '打开', ['打开1', '打开2'], '保存', '退出']], # '---'分割 ‘!哈哈’禁用‘哈哈’这个功能
['编辑', ['撤销', '重做', '剪切', '保存', '!感叹号禁用功能']],
['帮助', ['---', '检测更新', '---', '使用指南::YeXun', '---', '!关于']] # 非整体中的key,而是部分中的key,其中,key='使用指南::YeXun'
]
layout = [
[sg.Menu(menu, key='-A-', tearoff=False)], # 整体的key # tearoff=False 中False改为True,将启动菜单栏独立功能
[[sg.InputText(size=(30, 1))] for _ in range(5)]
]
window = sg.Window('菜单演示', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == '使用指南::YeXun':
sg.popup('暂无指南')
window.close()
(35) window窗口常用属性
import PySimpleGUI as sg
layout = [
[[sg.InputText()] for _ in range(6)],
[sg.Button('确定'), sg.Button('取消')]
]
window = sg.Window('pySimpleGUI', layout,
location=(None, None), # 默认窗口出现位置
size=(500, 500), # 窗口的宽度和高度
element_padding=(30, 20), # 元素间间隔设定
button_color=('black', 'red'), # 按钮元素颜色设定(文本颜色,背景颜色)
font=('黑体', '15'), # 字体名称和大小
background_color='pink', # 背景颜色设定
auto_close=False, # 界面自动关闭设定, 和下面的配合使用
auto_close_duration=3, # 自动关闭开启后,持续打开时间, 默认为3秒
no_titlebar=False, # 界面无标题栏设定
grab_anywhere=False, # 拖拽窗口设定
keep_on_top=False, # 如果True,界面保持着屏幕最前方
resizable=False, # 如果为True, 界面生成后可以调整大小
disable_close=False, # 如果为True,窗口关闭按钮将不起作用
disable_minimize=True, # 如果为True,窗口最小化将不起作用
right_click_menu=None, # 右击调出菜单
transparent_color=None, # 界面透明设定 =sg.theme_background_color()
element_justification='center' # 元素对齐方式设定,有效值 left, right, center
)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()
(36) 多行文本框元素
import PySimpleGUI as sg
text1 = """永远爱你
鹅鹅鹅呃呃呃,哈哈哈哈哈。
飞蛾发发阿发,阿发发发发。
啊发发发发啊,啊发发发发。
发发发发发发,法网发任发。
"""
layout = [
[sg.ML(default_text=text1, # Multiline 缩写ML
disabled=False, # 默认显示的文本
border_width=None, # 边界线条宽度设定
size=(50, 6), # 宽度and行高
background_color=None, # 背景颜色
text_color=None, # 文本颜色
enable_events=False, # 元素事件属性
key='-A-', # 元素的唯一标识符
write_only=False, # 为True时,文本框只提供用户写入,窗口不读取,无返回值
reroute_stdout=False, # print 语句内容会显示在此文本框内
reroute_cprint=True, # 使用 cprint 将内容打印到此文本框内。
# 详细参考sg.cprint()
reroute_stderr=False, # 捕捉异常时将文本写在此元素内,sys.stderr.write('?')
autoscroll=False, # 为True, 更多数据添加到末尾时,元素的内容将自动滚动
focus=False, # 字体名称和大小
pad=None, # 和周围元素间间隔的设定
tooltip=None, # 悬浮文本
justification=None, # 对齐方式设定
right_click_menu=None, # 右击调出菜单设定
visible=True, # 元素可见状态设定
do_not_clear=True, # 默认为True, 如果设定为False, 窗口读取一次,内容就会自动清楚
)],
[sg.OK(), sg.Cancel()]
]
window = sg.Window('多行文本演示', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == '-A-':
window['-TEXT-'].update(
value='你好!', # 更新内容
disabled=None, # 元素禁用
append=True, # 如果为True, 要更新的内容会在原来文本的下方,原来的文本不会消失
font=None, # 字体大小和名称
text_color=None, # 文本颜色
background_color=None, # 背景颜色设定
text_color_for_value=None, # 更新的文本的字体颜色设定
background_color_for_value=None, # 更新的文本的背景颜色设定
visible=None, # 元素可见状态更新,默认可见
autoscroll=None, # 更新文本是否自动滚动,默认不自动滚动
justification=None, # 更新文本的对齐方式,left, right, center
)
if event == 'OK':
print('ok')
if event == 'Cancel':
# cprint的相关属性:
# args = * < 1 or object >
# 可变参数
# end = None, # 结束符,默认为回车键
# sep = " ", # 分隔符,默认为空格键
# text_color = None, # 文本颜色,可简写成t
# background_color = None, # 背景颜色,可简写成b
# colors(None) # 可以简写成c
# key=None, # 元素的唯一标识符
# justification=None,
# 文本的对齐方式,left,right,center, 可简写l,r,c
sg.cprint('cancel', '您按了取消!', '随便添加内容')
window.close()
(37) 多行文本框知识点补充
import PySimpleGUI as sg
text1 = """永远爱你
鹅鹅鹅呃呃呃,哈哈哈哈哈。
飞蛾发发阿发,阿发发发发。
啊发发发发啊,啊发发发发。
发发发发发发,法网发任发。
"""
layout = [
[sg.ML(default_text=text1, size=(50, 6), key='-TEXT-')],
[sg.OK(),
sg.VerticalSeparator(color='red', key=None, pad=((10, 10), (10, 10))), # 垂直分割线
sg.Cancel()]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
if event == 'OK':
window['-TEXT-'].print(
# '你好', # 打印文本
# end='', # 要打印的元素的结束符,默认为换行 end='\n'
# sep=None, # 要打印的元素的分隔符 默认为空格 sep=' '
# text_color=None, # 要打印的文本的颜色
# background_color=None, # 要打印的元素这一行的背景颜色
# justification=None, # 要打印的元素对齐方式
)
if event == 'Cancel':
sg.cprint('Cancel', '你按了取消')
window.close()
(38) 表格元素的设定方法
import PySimpleGUI as sg
a = ['编号', '商品', '价格', '', '', '']
b = [['001', '牛奶', '5'], ['002', '牛奶', '6'], ['003', '香烟', '10'], ]
layout = [
[sg.Table(b, # 表格内容
headings=a, # 表格头部
max_col_width=500, # 所有列的最大宽度(要和控制‘列宽’的属性进行配合使用)
auto_size_columns=None, # 是否自动适应列宽度
def_col_width=10, # 定义列表宽度
display_row_numbers=False, # 是否显示序号列
justification='l', # 对齐方式l,c,r
num_rows=10, # 定义行数
row_height=20, # 定义行高
key='-userDate.txt-',
font=('黑体', 10), # 字体名称和大小
text_color=None, # 字体颜色
background_color='red', # 背景颜色
enable_events=True, # 事件触发
bind_return_key=True, # 绑定键盘
)]
]
window = sg.Window('pySimpleGUI', layout)
while True:
event, values = window.read()
print(event, values)
if not event:
break
window.close()