在进程中更新 GUI 项目

mil*_*117 7 python pysimplegui

我正在尝试为我的应用程序制作一个 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()
Run Code Online (Sandbox Code Playgroud)

是否可以只在按下按钮Listbox后显示?Read因为我只会Listbox在输入后获得值。也许可以在按钮事件后用新值更新列表框?

Mik*_*eyB 11

确实可以在按钮事件之后用新值更新列表框。我只需要在你的代码中添加几行就可以得到这个。

每当您希望更改现有窗口中的元素值时,您都可以使用元素的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()

Run Code Online (Sandbox Code Playgroud)