github python 获取窗口句柄 python获取窗口button并点击_App


项目目标

  1. 实现一个 one-shot 窗口,(完成)
  2. 使用 Input 组件读取用户姓名,
  3. 使用 Popup 组件提示欢迎信息。

回顾

上一节,我们已经在 https://repl.it/ 中编辑代码,成功运行了第一个视窗:


github python 获取窗口句柄 python获取窗口button并点击_控件_02


为了方便,之后我将直接截取右上角的视窗:


github python 获取窗口句柄 python获取窗口button并点击_App_03


项目目标的第一步成功搞定,下来实现目标中的 2、3,让它更加完善。

开始

获得用户输入

视窗通过 window.read()

windows.read() 不阻塞的话,可以为 read 函数指定 timeout 参数,如果一定时间内用户没有输入, read

让我们增加一点代码,检查一下 window.read()


import PySimpleGUI as sg

layout = [ [sg.Text("Name"), sg.Input()], [sg.Button("OK")] ]

window = sg.Window("Hello App", layout)
ret = window.read()
print(ret)


向输入框中输入 i love python,在命令行中看到


('OK', {0: 'i love python'})


可以看到 ret[1][0] 就是输入框中的文字。

window.read()

  • 触发 window.read()
  • 一个字典,包含此时所有可输入控件的值。未指定 key 的控件会自动从 0 开始索引,否则将以各控件的 key 为索引。通常称之为 values。

目前的视窗中

  • 只包含一个按钮:Button,且没有指定 key,因此 event 就是按钮的文字 “OK”;
  • 只包含一个可输入组件:Input,且没有指定 key,values 字典中的索引是 0。

视窗中的组件会越来越多,所以最好为组件命名,在实例化的时候传入参数 key 即可。


import PySimpleGUI as sg

# Input 增加了参数 key
layout = [ [sg.Text("Name"), sg.Input(key="-NAME-")], [sg.Button("OK", key="-OK-")] ]

window = sg.Window("Hello App", layout)
ret = window.read()
print(ret)


输出:


('-OK-', {'-NAME-': 'i love python'})


event 是 OK 按钮的 key: “-NAME-”, values 字典中的索引变成了输入框的 key: "-NAME-"。输入框的信息已经可以正确获取了!

最后一步,弹窗提示

PySimpleGUI 已经提供了弹窗对象 Popup,弹窗对象是一次性的,只需要指定弹窗显示的字符串即可,如果有多行信息,可以作为多个参数传入。希望你还记得字符串拼接方法,以便显示形如 “欢迎 xxx!” 的信息。


import PySimpleGUI as sg
layout = [ [sg.Text("Name"), sg.Input(key="-NAME-")], [sg.Button("OK", key="-OK-")] ]

# 阻塞,直到用户点击按钮才返回
window = sg.Window("Hello App", layout)

# window.read() 返回的是 tuple,这里直接将 tuple 解包为 event 和 values 备用
event, values = window.read()

# 拼接字符串, 我刚发现这款 online IDE 不支持中文,只能上英文了!
info = "Welcome " + values["-NAME-"]

# 弹窗,演示多行信息
sg.Popup(info, "one more line", "another line")

# 最后,关闭 windows 是个好习惯
window.close()


顺利实现了弹窗:


github python 获取窗口句柄 python获取窗口button并点击_控件_04


总结

只用了不到 10 行,实现了一个典型的视窗程序,体验已经比单纯的脚本高到不知哪里去了。

你可以试试,如果多次使用 Popup 创建弹窗,会怎样呢?

明天做点什么呢,天儿冷了,写个查询天气的小工具,怎么样!?

我们会用到:

  • requests 库
  • json 库
  • 对 HTTP 协议有一点了解就更好了!

明天见咯!