缘起:
工作中使用频次较高的操作都需要登录到某个管理平台上进行选择操作,如果是给别人使用还算可以, 但是作为平常使用还是感觉较为繁琐,于是打算开发一个桌面小工具解决这个痛点,达到使用时及时调起使用,方便而节约时间.
Electron,python,flutter...工具框架很多, 前端不擅长,flutter需要重新了解, 最终多款之后选择基于python的一个工具PySimpleGUI,好处在这里就不说了,可以自行百度
[开始]
PySimpleGUI是基于Python的图形界面开发工具,相较于Python自带的图形界面开发库Tkinter,第三方图形界面开发工具PyQT、WxPython等,其具有基础要求低、代码量少、修改方便、涵盖内容多等优势。
需要使用的工具1、Python 3.6 及以上版本2、外部库:
①PySimpleGUI(主要库,基于Python自带的GUI图形设计库Tkinter)
②PySimpleGUIWX(基于GUI图形设计库WxPython)
③PySimpleGUIQT(基于GUI图形设计库PySID2)
④PySimpleGUIWEB(基于GUI网页端图形设计库Remi)
3、第三方编程软件
推荐使用 Sublime Text 或者 PyCharm 两种中的一种软件
[安装]
示例:
1、定义窗口关闭事件
窗口关闭按钮是界面右上角的“X”。
定义窗口关闭事件是至关重要的,当你忘记定义窗口关闭事件,然后又点击了窗口右上角的X按钮,它会默默的消耗你100%的CPU。
2、按钮点击事件
用来判断点击按钮的行为是否发生
3、其他元素事件
像文本元素、输入框、下拉菜单等事件属性默认是关闭的。当手动设置他们的事件属性enable_events = Tnue 时,他们也将具有事件属性。
4、通过列表索引获取返回值
列表是最常用的Python数据类型,它可以存放不同的数据类型(str、int、char等等),用中括号括起来,元素之间用逗号隔开。
5、通过列表获取返回值
界面默认的返回值是通过列表索引获得指定值,但是当给元素设定唯一标识符(key),则该元素无法通过列表索引,只能通过字典key进行索引。(print(values[key]))即将文本元素、输入框、下拉菜单等的定位由数字替换为标识符(key)
如:
在点击“确认”按钮之后,会打印出结果:
******************************************************************************************** 自定义主题
1、主题内容包含窗口的背景颜色、文本(text)颜色、文本框底色、按钮的字体颜色、按钮颜色等等。
2、查看有效主题
使用代码:
3、获取所有有效主题值
使用代码
4、设定主题
①设定指定主题
②设定随机主题
5、修改部分主题设置
主题代码 | 释义 |
Background | 背景色 |
Text | 文本颜色 |
Input | 输入框底色 |
Scroll | 滚轮颜色 |
Text_Input | 输入框文字颜色 |
Button | 按钮颜色(字体颜色,按钮颜色) |
Border | 边界线宽度 |
Slide_Depth | 滑块宽度 |
sg.theme_(修改内容,如text)_color(('主题颜色,如Black'))
eg: sg.theme_Text_color
****************************************************************************************** 自定义窗口内容
1、使用for循环快速自定义窗口
①for 循环前面是个小括号时,从左向右遍历
如:
②for循环前面是个中括号时从上向下遍历
如:
2、元素之间的组合
①直接位于一个列表里面
②多个列表结合
3、元素间除了用“,”隔开以外,还可以用“]+[”替代。
如:
*************************************************************************** 文本框
一、Text元素及内容
元素 | 内容 |
text="" | str:要显示的文本。可以包含/n以实现多行。 |
key=None | [str, int, tuple, object],元素唯一标识符,书写规范 key='-NMAE-'。用于元素的定位。 |
size=(None, None) | (int, int): 元素宽度,行高 |
font=None | 设定字体的名称和大小。font='宋体'、font=('宋体',int)或者font=['宋体',int] |
auto_size_text=None | bool: 元素根据文本自动调节大小 |
enable_events=False | 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, int)、((int, int),(int,int)) 、(int,(int,int))、 ((int, int),int)或者(left/right, top/bottom)、((left, right), (top, bottom)) |
right_click_menu=None① | 右击调出菜单。List[List[Union[List[str],str]]]。设定后,右击此元素可以调出菜单 |
grab=False | bool:如果为真,点此元素可以移动拖拽窗口 |
tooltip=None | str:悬浮文本 ,当光标置于该元素上方,会显示设定的文本 |
visible=True | bool: 元素可见状态 |
①右击调出菜单,写法为:
运行:
二、元素更新
1、更新方法
2、可更新元素
①更新文本显示:
②更新文本背景颜色
③更新文本颜色
④更新字体名称或者大小
⑤更新元素的是否可见
********************************************************************* 单行输入框
一、单行输入框元素及内容
元素 | 内容 |
default_text='' | 默认值设定,可以为空字符串 |
key=None | 元素的唯一标识符,规范 key='-INPUT-' |
size=(None, None) | 宽,高 |
disabled=False | bool:元素禁用,如果为True则禁用,无法输入任何值 |
password_char="" | 密码字符,一般设置为* |
justification=None | 对齐方式:'r'、'l'、'c' |
background_color=None | 输入框的颜色 |
text_color=None | 输入框的文本颜色 |
font=None | 输入框字体的名称或者大小设定 |
tooltip=None | str: 悬浮文本。当光标置于该元素上方时,设置的文本会显示 |
border_width=None | 输入框边界线宽度设定 |
enable_events=False | bool : 输入框的事件属性。如果设定为True,输入值时会发生一个事件 |
do_not_clear=True | bool : 输入框内容不被清除。如果为False,一发生事件,该输入框内的值会被清除 |
focus=False | bool : 设定焦点。如果为真,则光标显示在此输入框 |
pad=None | 元素之间彼此间隔距离,数字顺序为左右上下。(int, int)、((int, int),(int,int))、(int,(int,int))、 ((int, int),int)或者(left/right, top/bottom)、((left, right), (top, bottom)) |
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[key].update()`
`window[key].Update()`
可更新元素:
四、SetTooltip方法,用于元素悬浮文本的设定:
************************************************************** 按钮
一、按钮元素介绍
元素 | 内容 |
button_text="" | 显示在按钮上的文本 |
key=None | 元素的唯一标识符 |
tooltip=None | 悬浮文本 |
disabled=False | 元素禁用设定,如果为True,点击按钮也无法发生事件 |
image_filename=None | 图片路径,按钮用图片表示。只支持GIFs和PNGs格式,和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…… |
border_width=None | 按钮边界线设定 |
size=(None, None) | 按钮尺寸设定 |
auto_size_button=None | 按钮上的文本自动调节 |
button_color=None | 按钮颜色 |
disabled_button_color=None | 按钮元素禁用时显示的按钮颜色 |
font=None | 字体名称,大小设定 |
bind_return_key=False | 绑定回车键。如果设定为True,回车键会使此元素被点击 |
focus=False | 焦点设置 |
pad=None | 和其他元素之间间隔设定 |
visible=True | 元素的可见状态设定.如果为True,元素则不可见 |
更新内容:
************************************************************************************** 列表元素
一、列表元素介绍
元素 | 内容 |
Values="" | 列表或者元组等 |
=None | 默认选中的值或者列表 |
key=None | 元素的唯一标识符 |
select_mode=None | 选择模式,有效值包含如下4种: ①single,单选,更换时点击选择; ②multiple,可以多选,逐一点击选择; ③browse,单选,鼠标按住也可以更换选择; ④extended,可以多选,鼠标按住也可以扩展选择 |
enable_events=False | 元素的事件属性。如果设定为True,元素列表项目被选中时会发生事件 |
bind_return_key=False | 绑定回车键。如果设定为True,回车键被按下时相当于此元素被点击 |
size=(None, None) | 字符宽度,行高 |
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 | 右击调出菜单。List[List[Union[List[str],str]]]。设定后,右击此元素可以调出菜单 |
visible=True | 元素可见状态设定 |
二、更新方法
可更新元素:
**************************************************************************** 下拉菜单
一、下拉菜单元素介绍
元素 | 内容 |
Values = "" | List[Any]或者Tuple[Any] 。显示下拉菜单信息,列表或者元祖 |
default_value=None | 初始值设定,默认选中 |
key=None | 唯一标识符 |
size=(None, None) | 元素宽度,行高 |
auto_size_text=None | 元素根据文本自动调节 |
background_color=None | 背景颜色设定 |
text_color=None | 文本颜色设定 |
enable_events=False | 元素事件属性。如果设定为True,当元素被选中时,会发生一个事件 |
disabled=False | 元素禁用状态设定。设定为True时,元素不能进行选择,也不能输入 |
pad=None | 元素间隔设定 |
tooltip=None | str: 悬浮文本设定 |
readonly=False | 元素只读属性,只能选择,不能输入内容 |
font=None | 元素字体名称或者大小设定 |
visible=True | 元素可见状态设定 |
二、更新方法
元素可以更新的属性:
注意:
当更新value时,即使处于“readonly=True”,即只读状态下,若“Values”内没有,仍然可以更改,但当重新选择后值消失。