kkkkkkkkn 发表于 2023-9-12 20:03

PySimpleGUI使用指北

如你所见,这是一个python库,可以用它创建能运行的窗口应用,用专业的术语来说 **PySimpleGUI 是一个基于 tkinter 的 Python GUI 库,可以使用 PySimpleGUI 创建各种类型的窗口和交互式应用程序**
接下来开始教程,首先打开我们的pycharm(在这之前要创建一个项目),在py文件中输入
```Python
import PySimpleGUI
```
如果PySimpleGUI这段字底下出现红波浪线,悬停在这段字上面,会出现蓝色字体*Install package PySimpleGUI*,点击并等待安装成功,成功后红色波浪线会消失(没有红色波浪线就是已经安装了).
****
因为咱这个库的功能是创建各种类型的窗口和交互式应用程序,所以该有的程序咱一个都不能少

## 首先构思咱的代码构成

1.首先咱要导入模块,也就是项目所需的库,大部分情况下都不止用一个库.

2.其次要构思文字,图片,按钮等的布局,画个图是最好不过.

3.然后就该创建窗体,相当于画布,没画布怎么画画.

4.创建事件循环
**事件循环通常用于接收和处理用户的输入事件,例如点击按钮、输入文本等**。事件循环的基本原理是通过不断地监听事件发生并触发相应的回调函数来实现。事件其实就是人对电脑的动作,比如点击按钮,输入文字等,然后程序根据这些事件来判断执行程序的哪一部分
chatgpt说**事件循环的优势在于它可以实现非阻塞的异步操作。通过设置合适的超时时间,您可以平衡程序的响应速度和资源消耗。同时,通过事件循环机制,您可以实现交互式的用户界面,响应用户的输入,并做出相应的动作。**

5.关闭窗口
如果不关闭窗口,程序会一直运行,用户无法退出程序。
## 其次做代码实现(信息输入界面)
正文正式开始
```Python
# 导入模块
import PySimpleGUI as sg
```
这里`sg`就相当于`PySimpleGUI`的小名,调用`sg`这个小名就相当于调用`PySimpleGUI`,方便调用

```Python
# 布局
layout = [
, # text文本
,
,
,

]
```
定义一个layout列表存储我的布局.
`sg.text` 是 PySimpleGUI 中用于创建文本显示的函数,点击它并不会有任何事件,所以咱可以添加`enable_events=True`使得点击字体成为一个**事件**,至于`key='aa'`,会使点击*测试*字体的事件名称变为`aa`(文字内容过多时超好用),不然事件名称就是*测试*了.
as for `size`属性,`text_color`属性,`background_color`见名知意即可
`sg.InputText` 是 PySimpleGUI 提供的用于创建文本输入框(Input)的方法。它可以让用户输入文本,并将输入的文本作为返回值。
**注意:传入图片只能是png和gif      size属性定义的是文本框的大小**
****
```Python
# 创建窗口
window = sg.Window('可视化测试', layout)
```
创建窗口代码很死,传入两个参数,第一个是窗口标题,layout是窗口布局
****
```Python
# 事件循环
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`,而不是其它具有类似行为的对象。如果使用 `==` 操作符,会执行值比较,这可能出意外。

成果在附件{:1_918:}


如有谬误,还请指正{:1_919:}

redfieldw 发表于 2023-9-12 23:08

这个能用CSS调整界面吗,还是只能用它预设的参数

hrh123 发表于 2023-9-13 00:22

redfieldw 发表于 2023-9-12 23:08
这个能用CSS调整界面吗,还是只能用它预设的参数

虽然我不太用这个库,但这是Python啊,和CSS有毛关系{:301_1007:}

zhanglei1371 发表于 2023-9-13 05:48

gui和打包是py的短处,是c#的长处。

kkkkkkkkn 发表于 2023-9-13 06:38

redfieldw 发表于 2023-9-12 23:08
这个能用CSS调整界面吗,还是只能用它预设的参数

不可以的哦

kkkkkkkkn 发表于 2023-9-13 08:22

zhanglei1371 发表于 2023-9-13 05:48
gui和打包是py的短处,是c#的长处。

哥们你好强啥都懂啊

~零度 发表于 2023-9-13 09:56

可以考虑使用PyQT,这个功能全面,能做出很好看的界面

kkkkkkkkn 发表于 2023-9-13 17:36

~零度 发表于 2023-9-13 09:56
可以考虑使用PyQT,这个功能全面,能做出很好看的界面

之前学过,确实比这个好用多了

kaohsing 发表于 2023-11-12 06:17

pysimplegui大家族还有qt版和web版
页: [1]
查看完整版本: PySimpleGUI使用指北