You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySimpleGUI实现用户输入存储至Python字典的问题

问题:PySimpleGUI输入无法正确存入字典

我正在构建一个用户图形界面,允许用户输入数值,界面已能正常运行,但希望后续可再次访问这些用户输入,将所有输入项(键)和对应答案(值)存储到一个dict中。然而我无法正确实现键值对的字典存储,尝试用for循环实现后,得到的字典不符合预期。

问题代码

import PySimpleGUI as sg

sg.theme('DarkTeal9')

layout = [
    [sg.Text('Bitte füllen Sie alle Felder aus:')],
    [sg.Text('Betrachtetes System:', size=(15,1)), sg.Combo(['HTWP ','KS '], key = 'System')],
    [sg.Text('Zinsfaktor [bitte gleicher Zinsfaktor für HTWP & KS]:', size=(25,2)), sg.InputText(key='q')],
    [sg.Text('Betrachtungszeitraum [bitte gleicher Betrachtungszeitraum für HTWP & KS]:', size=(25,3)), sg.InputText(key='T')],
    [sg.Text('Preisänderungsfaktor Investition:', size=(25,1)), sg.InputText(key='r0')],
    [sg.Text('Nutzungsdauer: ', size=(25,1)), sg.InputText(key='T_N')],
    [sg.Text('Prozentsatz Förderung:', size=(25,1)), sg.InputText(key='F')],
    [sg.Text('Wärmemenge Senke [kW]:', size=(25,1)), sg.InputText(key='Q_Senke')],
    [sg.Text('COP:', size=(25,1)), sg.InputText(key='COP')],
    [sg.Text('Elektrische Leistung [kW]:', size=(25,1)), sg.InputText(key='P_El')],
    [sg.Text('Stromkosten [€/kWh]:', size=(25,1)), sg.InputText(key='S_Kosten')],
    [sg.Text('Volllaststunden [h]:', size=(25,1)), sg.InputText(key='VLast_h')],
    # Stromb_a
    # Wärmeb_a
    [sg.Text('Lohnkosten [€/h]:', size=(25,1)), sg.InputText(key='Lohn_h')],
    [sg.Text('Anzahl Arbeitsstunden:', size=(25,1)), sg.InputText(key='Anz_Arbeits_h')],
    [sg.Text('Preisänderungsfaktor Strom:', size=(25,1)), sg.InputText(key='r_v')],
    [sg.Text('Preisänderungsfaktor Stundenlohn:', size=(25,1)), sg.InputText(key='r_b')],
    [sg.Text('Faktor für den Aufwand bei der Wartung und Inspektion:', size=(25,2)), sg.InputText(key='f_w_insp')],
    [sg.Text('Faktor für den Aufwand bei der Instandsetzung:', size=(25,2)), sg.InputText(key='f_inst ')],
    [sg.Submit(),sg.Button('Clear'),sg.Exit()]
]

window = sg.Window('Definition Parameter',layout)
global HTWP_Daten
HTWP_Daten = {}


def clear_input():
    for key in values:
        window[key]('')
    return None

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == 'Exit':
        break
    if event == 'Clear':
        clear_input()
        
    if event == 'Submit':
        
        # Create a Dict to save the Input for later
        for key in values:
            HTWP_Daten[key]= values
        print(HTWP_Daten)
        
window.close()

错误输出

{'System': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'q': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'T': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'r0': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'T_N': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'F': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'Q_Senke': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'COP': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'P_El': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'S_Kosten': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'VLast_h': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'Lohn_h': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'Anz_Arbeits_h': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'r_v': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'r_b': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'f_w_insp': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}, 'f_inst ': {'System': 'HTWP ', 'q': '12', 'T': '234', 'r0': '567', 'T_N': '43', 'F': '22', 'Q_Senke': '34', 'COP': '22', 'P_El': '11', 'S_Kosten': '33', 'VLast_h': '22', 'Lohn_h': '11', 'Anz_Arbeits_h': '33', 'r_v': '22', 'r_b': '11', 'f_w_insp': '22', 'f_inst ': '444'}}

解决方案

问题出在Submit事件的循环逻辑里:你把整个values字典赋值给了HTWP_Daten的每个键,导致每个键对应的都是完整的输入字典,而不是单个输入值。

正确写法(两种方式)

  1. 直接复制values字典(推荐,最简单)
    values本身就是PySimpleGUI返回的包含所有输入键值对的字典,直接用copy()方法复制即可:
if event == 'Submit':
    HTWP_Daten = values.copy()
    print(HTWP_Daten)
  1. 手动循环赋值(演示正确逻辑)
    如果一定要用循环,要给每个键赋值对应的values[key],而不是整个values字典:
if event == 'Submit':
    HTWP_Daten.clear()  # 先清空旧数据
    for key in values:
        HTWP_Daten[key] = values[key]
    print(HTWP_Daten)

修改后的完整代码

import PySimpleGUI as sg

sg.theme('DarkTeal9')

layout = [
    [sg.Text('Bitte füllen Sie alle Felder aus:')],
    [sg.Text('Betrachtetes System:', size=(15,1)), sg.Combo(['HTWP ','KS '], key = 'System')],
    [sg.Text('Zinsfaktor [bitte gleicher Zinsfaktor für HTWP & KS]:', size=(25,2)), sg.InputText(key='q')],
    [sg.Text('Betrachtungszeitraum [bitte gleicher Betrachtungszeitraum für HTWP & KS]:', size=(25,3)), sg.InputText(key='T')],
    [sg.Text('Preisänderungsfaktor Investition:', size=(25,1)), sg.InputText(key='r0')],
    [sg.Text('Nutzungsdauer: ', size=(25,1)), sg.InputText(key='T_N')],
    [sg.Text('Prozentsatz Förderung:', size=(25,1)), sg.InputText(key='F')],
    [sg.Text('Wärmemenge Senke [kW]:', size=(25,1)), sg.InputText(key='Q_Senke')],
    [sg.Text('COP:', size=(25,1)), sg.InputText(key='COP')],
    [sg.Text('Elektrische Leistung [kW]:', size=(25,1)), sg.InputText(key='P_El')],
    [sg.Text('Stromkosten [€/kWh]:', size=(25,1)), sg.InputText(key='S_Kosten')],
    [sg.Text('Volllaststunden [h]:', size=(25,1)), sg.InputText(key='VLast_h')],
    # Stromb_a
    #
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:40:29