python - 如何使用 while 循环中的键 PySimpleGUI 获取日历按钮的值?
问题描述
我对 PySimpleGUI 很陌生。我正在为桌面应用程序构建 GUI,并想使用日历。但是,当我从 Calendar Picker Popup 中选择时,在没有超时的情况下,在 while 循环中检索 Calendar Button 事件的值时出现了问题。我尝试使用event == 'CalendarButton's text'来获取它的值,但不能,尽管如果您选择设置不同的日期,它的按钮文本每次都会改变。你能帮忙吗,或者我怎样才能在while循环中使用它的键来获取它的(或任何元素的)值。或者至少我可以使用 Tkinter 日历包。如果是这样,我如何将 Tkinter 日历与 PySimpleGUI 窗口连接,我是否必须将元素的键绑定与 Tkinter 一起使用?
这是我放入窗口布局的日历按钮定义代码:
sg.CalendarButton('Calendar', target='_CALENDAR_', pad=None, font=('MS Sans Serif', 10, 'bold'),
button_color=('red', 'white'), key='_CALENDAR_', format=('%d %B, %Y'))
这是while循环事件处理部分
# LOOP EVENTS #
while True:
# READ EVENT VALUES #
event, values = window.read()
# EXIT OR CLOSE EVENT #
if event is None or event == 'Exit':
break
# BUTTON EVENTS
# CALENDAR BUTTON CLICKED EVENT #
if event == 'Calendar':
window['_CALENDAR_'](disabled=True)
# CLOSE WINDOW
window.close()
# POPUP
sg.Popup('Title',
'The results of the window.',
'The button clicked was "{}"'.format(event),
'The values are', values)
此外,退出窗口后,我无法在 sg.Popup() 输出中看到此事件的值
'EDITED' 抱歉,sg.Popup()中有错误。现在修好了。
解决方案
保存值和获取事件的方法是创建一个隐藏的输入字段。为输入字段启用事件,当日历填充您设置为目标的输入字段时,您将收到一个事件。
import PySimpleGUI as sg
layout = [ [sg.Text('Calendar example')],
[sg.In(key='-CAL-', enable_events=True, visible=False), sg.CalendarButton('Calendar', target='-CAL-', pad=None, font=('MS Sans Serif', 10, 'bold'),
button_color=('red', 'white'), key='_CALENDAR_', format=('%d %B, %Y'))],
[sg.Exit()]]
window = sg.Window('Calendar', layout)
while True: # Event Loop
event, values = window.read()
print(event, values)
if event in (None, 'Exit'):
break
window.close()
推荐阅读
- flutter - 我们可以在使用非空安全依赖项的项目中实现可靠的空安全吗?
- python - 从列标题中删除特殊字符
- variables - jupyterlab调试模式包含很多变量,它们是什么?
- javascript - 在 SassMeister 中平滑调整面板大小
- c# - 从其他脚本访问创建的精灵时的空引用 [C#]
- python - 在 subprocess.run 中使用变量
- mongodb - 春季数据Mongo。使用@Query 进行空间查询
- nginx - 基于 Nginx Ingress 中的授权令牌速率限制 GRPC 连接
- python - 使用带有 Google Coral USB 加速器的 Pycoral 库进行二进制图像分类
- typeerror - EDA、ML、TypeError:“str”和“int”实例之间不支持“>=”