PySimpleGUI中列表推导生成的Multiline元素放入Column时报错如何解决
问题根源
你的报错核心是main_column的嵌套层级不符合Column组件的要求:
你当前的main_column实际为三层嵌套结构:第一个元素是标题行,第二个元素是包含所有Multiline行的列表,结构为[[标题行], [行1, 行2, 行3...]]。
PySimpleGUI对顶层layout的校验相对宽松,会自动做隐式扁平化处理,所以直接赋值给layout时可以正常运行。但Column组件的参数校验更严格,要求必须是标准的两层结构:外层列表是所有行的集合,每个子元素是单独一行的元素列表,也就是结构需要为[标题行, 行1, 行2, 行3...]。
修复方案
把Multiline生成的行列表直接展开到main_column的第一层即可,同时注意左侧Text的高度要和Multiline对齐,避免行错位:
import PySimpleGUI as sg some_string = 'some string' x_labels = ['0', '1', '2', '3', '4'] y_labels = ['a', 'b', 'c', 'd', 'e'] # 用*解包展开Multiline行列表,直接构造标准两层结构 main_column = [ [sg.T(some_string)], *[[sg.Multiline(size=(10, 3), key=(x, y), disabled=True, justification='center', no_scrollbar=True) for x in range(len(x_labels))] for y in range(len(y_labels))] ] # 给Text设置和Multiline一致的高度,避免行错位 extra_column = [[sg.T(y_labels[y], justification='center', size=(10,3))] for y in range(len(y_labels))] layout = [[sg.Column(extra_column), sg.Column(main_column)]] window = sg.Window('Table Test', layout, default_element_size=(12, 1), element_padding=(1, 1), return_keyboard_events=True) # 补充事件循环(你原代码省略了这部分,运行需要加上) while True: event, values = window.read() if event == sg.WIN_CLOSED: break window.close()
内容的提问来源于stack exchange,提问作者Apothemia
相关产品推荐
相关产品推荐

