检查是否所有输入在 pysimplegui 中都有值

check if all inputs has values in pysimplegui

我有一个 window 有多个输入和这样的组合选择框

main_layout = [[sg.Text('First Name', size=(15, 1)),
  sg.InputText(key='gname', size=(25, 1))],
  [sg.Text('V Type', size=(15, 1)),
  sg.Combo(['option 1','option 2','option 3'],key="vtype",size=(25, 1)],
  [sg.Text('Last Name', size=(15, 1)),
  sg.InputText(key='glastname', size=(25, 1)],
  [sg.Submit('Submit'),sg.Cancel('Cancel')]]
layout = [[sg.Column(main_layout,scrollable=True,vertical_scroll_only=True, size=(755,500))]]
window = sg.Window('Form', layout, font='arial',resizable=True, element_justification='l',size=(755,500))
event, values = window.read()
    if event == 'Cancel' or event == sg.WIN_CLOSED:
        sys.exit()
    name_check = window['gname'].get().strip()
    if name_check == '':
        sg.popup(f"Field is Required")
    window.close()

我已经在名称事件中使用 name_check = window['gname'].get().strip() 来检查它是否为空我想做的是单击提交检查所有输入是否有值而不是空白,因为代码上面是一个表格,表格很长我只写了几个例如

表单数据将被写入一个带有正则表达式的文本文件,如果值为空,应用程序会崩溃,所以我想要一些可以同时检查多个事件键的东西 我该怎么做?

使用window.key_dict得到所有元素的所有key:element对的字典,然后迭代每个项目以确认它是否是sg.Input元素,并且所有输入都不是空字符串.

import PySimpleGUI as sg

sg.theme("DarkBlue3")
sg.set_options(font=("Courier New", 12))

layout = [
    [sg.Text(f"Line {i: >2d}:"), sg.Input("")] for i in range(10)] + [
    [sg.Button("Submit")],
    [sg.StatusBar("", size=(20, 1), key='Status')]
]

window = sg.Window('Title', layout, finalize=True)
prompt = window['Status'].update
input_key_list = [key for key, value in window.key_dict.items()
    if isinstance(value, sg.Input)]
while True:

    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == "Submit":
        if all(map(str.strip, [values[key] for key in input_key_list])):
            prompt("All inputs are OK !")
        else:
            prompt("Some inputs missed !")

window.close()