如何在while循环PySimpleGUI中使用其按钮获取日历按钮的值?

时间:2019-12-24 18:10:46

标签: python user-interface tkinter calendar pysimplegui

我对PySimpleGUI非常陌生。我正在为桌面应用程序构建GUI,并希望使用日历。但是当我从Calendar Picker Popup中选择时,在while循环中在 window.read()中没有超时的情况下检索Calendar Button事件的值时出现了问题。我尝试使用 event =='CalendarButton的文本'来获取其值,但是不能,尽管如果您选择设置不同的日期,其按钮文本每次都会更改。您可以帮忙吗,或者如何在while循环中使用其键获取它(或任何元素)的值。或者至少我可以使用Tkinter日历包。如果是这样,如何将Tkinter Calendar与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()输出中看不到该事件的值

“已编辑”很抱歉, sg.Popup()中有错误。现在修复它。

1 个答案:

答案 0 :(得分:1)

保存值和获取事件的方法是创建一个隐藏的输入字段。为输入字段启用事件,当日历填写您设置为目标的输入字段时,您将获得一个事件。

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()