如何在PySimpleGUI中使用元组作为文本框键并实现运算?
解决PySimpleGUI中使用元组作为元素键并进行运算的问题
嘿,我看到你遇到的问题了——你想用元组作为输入输出框的键,这本身没问题,但你错误地把元组当成变量直接赋值了,这在Python里肯定行不通。咱们一步步来修正:
核心问题分析
你写的(out1,x) = (in1,x)/2是在试图给元组(out1,x)赋值,但这不是更新PySimpleGUI元素内容的正确方式。PySimpleGUI的元素需要通过window[key]来访问,然后调用update()方法来修改显示内容。另外,输入框sg.InputText返回的值是字符串类型,你得先把它转换成数值(比如float或int)才能做运算。
修改后的完整代码
import PySimpleGUI as sg in1 = 1 out1 = 2 rows = 1 # number of rows in table layout = [ [sg.Text('Input1', size=(5, 1)), sg.InputText(size=(7, 1), key=(in1, 0))], [sg.Text('Output1', size=(5, 1)), sg.Text(size=(7,1), background_color='#e6d4a8', relief='sunken', border_width=1, key=(out1, 0))], # more rows... [sg.Text('')], [sg.Button('Start', size=(5, 1)), sg.Exit('Exit', size=(5, 1))] ] window = sg.Window('Test Window', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'Exit': break # 点击Start按钮时执行运算 if event == 'Start': for x in range(rows): # 获取输入值并转换为数值类型(这里用float兼容小数) try: input_value = float(values[(in1, x)]) # 计算结果 result = input_value / 2 # 更新输出文本框的内容 window[(out1, x)].update(f"{result:.2f}") # 格式化显示两位小数 except ValueError: # 处理输入非数字的情况 window[(out1, x)].update("无效输入") window.close()
关键修改点
- 获取输入值:通过
values[(in1, x)]获取输入框的内容,因为values字典的键就是你定义的元组。 - 类型转换:把字符串转成
float(或int)才能进行数学运算,否则会报错。 - 更新元素内容:使用
window[(out1, x)].update(内容)来修改文本框的显示值,这是PySimpleGUI更新元素的标准方式。 - 异常处理:加了
try-except块,防止用户输入非数字内容导致程序崩溃,提升健壮性。
如果后续要扩展更多行,只需要调整rows的值,然后在循环里自动处理每一行的输入输出,逻辑是通用的。
内容的提问来源于stack exchange,提问作者Duncan
相关产品推荐
相关产品推荐

