我正在尝试为我的应用制作GUI并遇到问题:
使用PySimpleGUI
我必须首先定义布局,然后才显示整个窗口。现在的代码是这样的:
import PySimpleGUI as sg
layout = [[sg.Text('Input:')],
[sg.Input(do_not_clear=False)],
[sg.Button('Read'), sg.Exit()],
[sg.Text('Alternatives:')],
[sg.Listbox(values=('value1', 'value2', 'value3'), size=(30, 2))]]
window = sg.Window('Alternative items', layout)
while True:
event, values = window.Read()
if event is None or event == 'Exit':
break
print(values[0])
window.Close()
是否可以仅在按下Listbox
按钮之后显示Read
?因为输入后我只会得到Listbox
的值。也许可以在按钮事件之后以新值更新列表框吗?
答案 0 :(得分:1)
确实可以在按钮事件之后用新值更新列表框。我只需要在您的代码中添加几行即可。
每当您希望在现有窗口中更改Elements的值时,都将使用Element的Update
方法进行更改。在http://www.PySimpleGUI.org的部分下查看软件包docs Updating Elements。
可以隐藏元素,但不建议使用。而是,创建一个新窗口并关闭旧窗口。 GitHub上有许多演示程序,向您展示如何执行多个窗口。
import PySimpleGUI as sg
layout = [[sg.Text('Input:')],
[sg.Input(do_not_clear=False)],
[sg.Button('Read'), sg.Exit()],
[sg.Text('Alternatives:')],
[sg.Listbox(values=('value1', 'value2', 'value3'), size=(30, 2), key='_LISTBOX_')]]
window = sg.Window('Alternative items', layout)
while True:
event, values = window.Read()
print(event, values)
if event is None or event == 'Exit':
break
if event == 'Read':
window.Element('_LISTBOX_').Update(values=['new value 1', 'new value 2', 'new value 3'])
window.Close()