更新进程中的GUI项目

7

我正在尝试为我的应用程序制作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()

在用户点击“读取”按钮之后才显示“列表框”,这种操作是否可行呢?因为我需要在输入内容后才能获取到“列表框”的值。也许可以在按钮事件后更新“列表框”中的新值吗?


你有得到一个对你有效的答案吗? - Mike from PSG
我使用了你的答案 :) - milka1117
1个回答

10

在按钮事件后更新列表框中的值是可行的。只需将您的代码添加几行即可实现这一点。

如果要更改现有窗口中元素的值,可以使用该元素的update方法。请查看http://www.PySimpleGUI.org网站上的包文档,了解有关更新元素的部分。

隐藏元素是可能的,但不建议这样做。相反,创建一个新窗口并关闭旧窗口。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 == sg.WIN_CLOSED or event == 'Exit':
        break
    if event == 'Read':
        window.Element('-LISTBOX-').update(values=['new value 1', 'new value 2', 'new value 3'])
window.close()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接