如何自动读取 PySimpleGui 上的值?

How can I automaticly read values on PySimpleGui?

我添加了一个浏览文件夹按钮,但在我单击另一个按钮之前它没有给我值。

我试过这样读

while True:
   event, values = mainwindow.Read()
   if values['Select folder...'] != '':
      print(values['Select folder...'])  

但同样的事情发生了。

您的问题中没有显示布局。

比如你在这里使用sg.FolderBrowse

选项 target 默认为 (sg.ThisRow, -1),表示同一行 sg.FolderBrowse 之前的元素。

如果您的布局中没有目标,则不会生成任何事件。 如果有target,只有当target带有选项enable_events=True.

时才会产生target的事件

因此,您的布局中应该有一个目标元素,大多数情况下,它是带有选项 enable_events=Truesg.InputText

import PySimpleGUI as sg

layout = [
    [sg.InputText(enable_events=True), sg.FolderBrowse('Select folder...')],
]

window = sg.Window("Title", layout, finalize=True)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    print(event, values)
    if values['Select folder...'] != '':
        print(values['Select folder...'])

window.close()
0 {0: 'D:/Document', 'Select folder...': 'D:/Document'}
D:/Document

如果从 `sg.InputText` 生成的任何事件都会有问题,比如按下键 'A'。这不是您需要的事件,也许也不是元素 `sg.InputText`。所以下一个例子只显示了 `sg.FolderBrowse`。

import PySimpleGUI as sg

layout = [
    [sg.InputText(disabled=True, visible=False, enable_events=True), sg.FolderBrowse('Select folder...')],
]

window = sg.Window("Title", layout, finalize=True)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    print(event, values)
    if values['Select folder...'] != '':
        print(values['Select folder...'])

window.close()
0 {0: 'D:/Document', 'Select folder...': 'D:/Document'}
D:/Document