import PySimpleGUI as sg
rows_needed = 2
result = [['text1', 'text2'], ['text3']]
menu_layout = []
for x in range(0,rows_needed):
temp = []
try:
temp.append(sg.Button(c) for c in result[x])
finally:
pass
menu_layout.append(temp)
print(menu_layout)
layout = [[sg.Button(c) for c in result]]
window = sg.Window('', menu_layout)
window.read()
so im attempting to create a nested list for menu layout, the result i want would be for example
menu_layout = [[sg.Button('text1'), sg.Button('text2')], [sg.Button('text3')],]
im using pysimplegui
my current code at the top gives the following result in powershell
[[<generator object menu.<locals>.<genexpr> at 0x0000016308733AE0>]] [[<generator object menu.<locals>.<genexpr> at 0x0000016308733AE0>], [<generator object menu.<locals>.<genexpr> at 0x0000016308733C30>]] Traceback (most recent call last): File "C:\Users\cafemax\projects\POS\POS\Client_Posv2.py", line 713, in <module> menu() File "C:\Users\cafemax\projects\POS\POS\Client_Posv2.py", line 532, in menu window = sg.Window('', menu_layout) File "C:\Users\cafemax\.venvs\stockcontrol\lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 9604, in __init__ self.Layout(layout) File "C:\Users\cafemax\.venvs\stockcontrol\lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 9783, in layout self.add_rows(new_rows) File "C:\Users\cafemax\.venvs\stockcontrol\lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 9753, in add_rows self.add_row(*row) File "C:\Users\cafemax\.venvs\stockcontrol\lib\site-packages\PySimpleGUI\PySimpleGUI.py", line 9708, in add_row if element.ParentContainer is not None: AttributeError: 'generator' object has no attribute 'ParentContainer'
the reason im trying to do this is because i need to be able to generate a variable amount of buttons based on the size of a list so i can't hard code this.
any help on how to fix this or change must make to my append
CodePudding user response:
temp
doesn't contain sg.Button
objects, it contains generators because that's what you appended to it. You don't want to create temp
and then append
the generator to it, you want to extend
your list with your generator. See What is the difference between Python's list methods append and extend?
for x in range(0, rows_needed):
temp = []
try:
temp.extend(sg.Button(c) for c in result[x])
finally:
pass
menu_layout.append(temp)
Alternatively, you can simply create temp
using a list comprehension:
for x in range(0, rows_needed):
temp = []
try:
temp = [sg.Button(c) for c in result[x]]
finally:
pass
menu_layout.append(temp)
I'm not sure what the try..finally
is for, it doesn't seem to be doing anything, but I left it in because that's not the question you're asking.