PySimpleGUI动态布局InputText的Read()方法仅读取最后一行问题
解决PySimpleGUI动态布局输入值读取异常的问题
问题根源
你碰到的问题核心在于动态生成布局时重复引用了同一个输入框列表对象。看你原始代码里的这两行:
line = [sg.InputText('', size=(3, 1)) for i in range(length)] entryLayout = [line for i in range(width)]
这里entryLayout其实是把同一个line列表复制了width次——也就是说所有行的输入框都是同一组对象的引用。当你在界面上输入内容时,后面的行会覆盖前面行的输入框状态,最终只有最后一行的输入值被留存下来。而硬编码布局时,每一行都是独立创建的sg.InputText对象,自然不会出现这个问题。
修复后的代码
只需要修改布局生成逻辑,确保每一行都是全新的输入框列表,而非重复引用同一个列表:
import PySimpleGUI as sg def entryGUI(length, width): # 直接生成二维列表,每一行都独立创建输入框 entryLayout = [[sg.InputText('', size=(3, 1)) for _ in range(length)] for _ in range(width)] entryLayout.append([sg.CloseButton("OK"), sg.CloseButton("Cancel")]) entryWin = sg.Window("CodeWord Solver").Layout(entryLayout) button, values = entryWin.Read() # 关闭窗口释放资源 entryWin.Close() # 遍历输入值字典的value部分,更直观获取内容 for value in values.values(): print(value + ",", end="") entryGUI(3, 3)
额外小建议
- 调用
entryWin.Close()关闭窗口,避免程序结束后残留未释放的窗口资源; - 遍历
values时用values.values()更直接,因为values是一个字典,键是输入框的序号,值才是你需要的输入内容。
内容的提问来源于stack exchange,提问作者samm82
相关产品推荐
相关产品推荐

