Python 如何从列表中生成一列复选框
我最近发现了PySimpleGUI。当时看起来它可以帮我省下很多工作。 我想使用PySimpleGUI作为界面为jpeg图像创建一个“标记器”。 我在一个简单的python列表中有一长串标记词 我取得了一些成功,因为我可以创建一行复选框,但不能创建一列。Python 如何从列表中生成一列复选框,python,pysimplegui,Python,Pysimplegui,我最近发现了PySimpleGUI。当时看起来它可以帮我省下很多工作。 我想使用PySimpleGUI作为界面为jpeg图像创建一个“标记器”。 我在一个简单的python列表中有一长串标记词 我取得了一些成功,因为我可以创建一行复选框,但不能创建一列。 我最初的研究发现了一个生成器,可以用来制作许多复选框。 我的目标是用列表生成的检查框填充3列 生成器代码段 我找到了这段代码,从这个PySimpleGUI生成按钮,然后对复选框进行了修改。我有工作函数,但无法将它们格式化为列 def CBtn(
我最初的研究发现了一个生成器,可以用来制作许多复选框。
我的目标是用列表生成的检查框填充3列 生成器代码段 我找到了这段代码,从这个PySimpleGUI生成按钮,然后对复选框进行了修改。我有工作函数,但无法将它们格式化为列
def CBtn(BoxText):
return sg.Checkbox(BoxText, size=(8, 1), default=False)
column2 = sg.Column([[sg.Text('User Id:')], [CBtn(Bx) for Bx in Tags1]])
主代码
如屏幕截图所示,生成的复选框设置在一行而不是一列中。因此,sg.Column(column2)
是一行。当我手动添加column5
的复选框时,我得到了一个正确的列
格式
当我使用生成器定义时,我得到以下信息:[CBtn('1')、CBtn('2')、CBtn('3')、CBtn('log')、CBtn('ln')、CBtn('-')],
我正在寻找这样的东西:[[CBtn('1')]、[CBtn('2')]、[CBtn('3')]、[CBtn('log')]、[CBtn('ln')]、[CBtn('-')]]、
这遵循手册第5列的格式
我已经尝试了许多不同的生成器和def
,但都没有成功。
下面是我尝试实现上述格式的一个示例
column1 = [[sg.Text('Column 1', justification='center', size=(10, 1))], [BaseTag.append([CBtn(Bx)]) for Bx in Tags1]]
但是我得到了一个AttributeError:'NoneType'对象没有属性'ParentContainer'
最终的
这应该很容易。我想,我把框架弯曲得太厉害了。
PySimplegui看起来不错,但经过几个小时的无头工作后,我想知道。据我所知,大规模生产对象只能在一个简单的循环中完成。 对代码的修改:。 1.[[CBtn(i)]表示范围内的i(len(Tags2))] 2. '第2栏和第5栏分别更改为第2栏和第5栏。 3.在“布局”中添加,因为没有逗号或括号;第二栏]],第五栏]]
def CBtn(BoxText):
return sg.Checkbox(BoxText, size=(8, 1), default=False)
col2 = [[CBtn(i)] for i in range(len(Tags2))]
col5 = sg.Column([[sg.Checkbox("BoxText1", size=(8, 1), default=False)],
[sg.Checkbox("BoxText2", size=(8, 1), default=False)],
[sg.Checkbox("BoxText3", size=(8, 1), default=False)],
[sg.Checkbox("BoxText4", size=(8, 1), default=False)]])
layout = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Image Tagger', size=(
30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)],
[sg.Text('Your Folder', size=(15, 1), justification='right'),
sg.InputText('Default Folder'), sg.FolderBrowse()],
[sg.Text('Column 2', justification='center', size=(10, 1))],
[sg.Column(col2)],
[col5]]
window = sg.Window('Everything bagel', layout)
据我所知,大规模生产的对象只能在一个简单的循环。 对代码的修改:。 1.[[CBtn(i)]表示范围内的i(len(Tags2))] 2. '第2栏和第5栏分别更改为第2栏和第5栏。 3.在“布局”中添加,因为没有逗号或括号;第二栏]],第五栏]]
def CBtn(BoxText):
return sg.Checkbox(BoxText, size=(8, 1), default=False)
col2 = [[CBtn(i)] for i in range(len(Tags2))]
col5 = sg.Column([[sg.Checkbox("BoxText1", size=(8, 1), default=False)],
[sg.Checkbox("BoxText2", size=(8, 1), default=False)],
[sg.Checkbox("BoxText3", size=(8, 1), default=False)],
[sg.Checkbox("BoxText4", size=(8, 1), default=False)]])
layout = [[sg.Menu(menu_def, tearoff=True)],
[sg.Text('Image Tagger', size=(
30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)],
[sg.Text('Your Folder', size=(15, 1), justification='right'),
sg.InputText('Default Folder'), sg.FolderBrowse()],
[sg.Text('Column 2', justification='center', size=(10, 1))],
[sg.Column(col2)],
[col5]]
window = sg.Window('Everything bagel', layout)
这几乎奏效了。我需要稍微更新一下发电机,以得到我想要的。 列只有数字。我需要添加关键字 修改代码:
column1 = [[CBtn(Tags1[i])] for i in range(len(Tags1))]
然后用列表中的值填充该列。
现在,让我们来看看这个框架有多简单。这几乎奏效了。我需要稍微更新一下发电机,以得到我想要的。 列只有数字。我需要添加关键字 修改代码:
column1 = [[CBtn(Tags1[i])] for i in range(len(Tags1))]
然后用列表中的值填充该列。
现在,让我们来看看这个框架有多简单。这几乎奏效了。我需要稍微更新一下生成器,以得到我想要的。这几乎可以正常工作。我需要稍微更新一下发电机,以得到我想要的。