Создание многострочных элементов с пониманием списка в столбце приводит к ошибке в PySimpleGUI

#python #pysimplegui

Вопрос:

Я создал многострочные элементы со списком, чтобы он выглядел как таблица. Теперь я хочу поместить эти элементы в столбец и создать несколько столбцов рядом.

Код:

 some_string = 'some string'
x_labels = ['0', '1', '2', '3', '4']
y_labels = ['a', 'b', 'c', 'd', 'e']

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))]]

extra_column = [[sg.T(y_labels[y], justification='center')] 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)
 

Что дает
это ошибка. Насколько я понимаю, каждый объект макета или столбца представляет собой список элементов списка.

Что я пробовал:

  • Проверил, можно ли использовать столбец main_column в качестве макета, что он и делает:
      some_string = 'some string'
     x_labels = ['0', '1', '2', '3', '4']
     y_labels = ['a', 'b', 'c', 'd', 'e']
    
     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))]]
    
     layout = main_column
    
     window = sg.Window('Table Test', layout, default_element_size=(12, 1), element_padding=(1, 1),
                    return_keyboard_events=True)
     

Это должно означать, что это список элементов списка, который также может использоваться внутри элемента столбца. Я что-то упускаю?

Ответ №1:

 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))],
]
 

main_colum[1] это не список элементов, а список списка элементов здесь. Это означает main_column , что это не список элементов списка.

main_colum следует пересмотреть, чтобы

 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))
]