如你所见,这是一个python库,可以用它创建能运行的窗口应用,用专业的术语来说 PySimpleGUI 是一个基于 tkinter 的 Python GUI 库,可以使用 PySimpleGUI 创建各种类型的窗口和交互式应用程序
接下来开始教程,首先打开我们的pycharm(在这之前要创建一个项目),在py文件中输入
import PySimpleGUI
如果PySimpleGUI这段字底下出现红波浪线,悬停在这段字上面,会出现蓝色字体Install package PySimpleGUI,点击并等待安装成功,成功后红色波浪线会消失(没有红色波浪线就是已经安装了).
因为咱这个库的功能是创建各种类型的窗口和交互式应用程序,所以该有的程序咱一个都不能少
首先构思咱的代码构成
1.首先咱要导入模块,也就是项目所需的库,大部分情况下都不止用一个库.
2.其次要构思文字,图片,按钮等的布局,画个图是最好不过.
3.然后就该创建窗体,相当于画布,没画布怎么画画.
4.创建事件循环
事件循环通常用于接收和处理用户的输入事件,例如点击按钮、输入文本等。事件循环的基本原理是通过不断地监听事件发生并触发相应的回调函数来实现。事件其实就是人对电脑的动作,比如点击按钮,输入文字等,然后程序根据这些事件来判断执行程序的哪一部分
chatgpt说事件循环的优势在于它可以实现非阻塞的异步操作。通过设置合适的超时时间,您可以平衡程序的响应速度和资源消耗。同时,通过事件循环机制,您可以实现交互式的用户界面,响应用户的输入,并做出相应的动作。
5.关闭窗口
如果不关闭窗口,程序会一直运行,用户无法退出程序。
其次做代码实现(信息输入界面)
正文正式开始
# 导入模块
import PySimpleGUI as sg
这里sg
就相当于PySimpleGUI
的小名,调用sg
这个小名就相当于调用PySimpleGUI
,方便调用
# 布局
layout = [
[sg.Text('测试', key='aa', enable_events=True)], # text文本
[sg.Text('姓名', size=2), sg.InputText('hello')],
[sg.Text('性别',text_color='red'), sg.InputText('男')],
[sg.Text('国籍', background_color='blue', enable_events=True), sg.InputText('China')],
[sg.Image(file='文件路径')]
]
定义一个layout列表存储我的布局.
sg.text
是 PySimpleGUI 中用于创建文本显示的函数,点击它并不会有任何事件,所以咱可以添加enable_events=True
使得点击字体成为一个事件,至于key='aa'
,会使点击测试字体的事件名称变为aa
(文字内容过多时超好用),不然事件名称就是测试了.
as for size
属性,text_color
属性,background_color
见名知意即可
sg.InputText
是 PySimpleGUI 提供的用于创建文本输入框(Input)的方法。它可以让用户输入文本,并将输入的文本作为返回值。
注意:传入图片只能是png和gif size属性定义的是文本框的大小
# 创建窗口
window = sg.Window('可视化测试', layout)
创建窗口代码很死,传入两个参数,第一个是窗口标题,layout是窗口布局
# 事件循环
while True:
event, values = window.read()
if event is None:
break
if event == 'aa':
print('aa')
if event == '国籍':
print(99)
window.read()
是 PySimpleGUI 提供的用于启动事件循环的方法。在调用 window.read()
时,PySimpleGUI 将等待用户与窗口进行交互,并返回一个触发的事件和对应的值(两个值)。
event
是触发的事件(例如按钮点击、菜单选择等),它是一个字符串。
values
是一个字典,包含了窗口中各个组件的当前值。
具体而言,window.read()
方法会阻塞程序的执行,直到发生某些用户事件。一旦事件被触发,例如用户点击了按钮或关闭了窗口,read()
方法就会立即返回,并将事件和对应的值封装在一个元组中返回给调用者。
第一个if
判断是否点击窗口右上角的关闭按钮,点击则事件返回None
此时执行break
跳出循环结束程序
剩下两个if
则是出现相应的事件时执行下面的print
语句,常常用来纠错
如果用户关闭了窗口,event
的值将为 None
,这时我们使用 break
语句来跳出循环,退出监听状态。
注意:为什么第一个if
用is
而不是==
在 Python 中,None
是一个唯一的对象。使用 is
操作符可以判断一个对象是否为 None
,而不是其它具有类似行为的对象。如果使用 ==
操作符,会执行值比较,这可能出意外。