这是我的ListBox和ScrollBar的代码。 ScrollBar显示在我的框架的右侧但是当ListBox超出其区域时被禁用并且无法工作:
frameLeft = Frame(self, relief = GROOVE, borderwidth = 4)
frameLeft.pack(side = LEFT, fill = Y, padx = 2, pady = 2)
scrollbar = Scrollbar(frameLeft)
scrollbar.pack(side = RIGHT, fill = Y)
lbModules = Listbox(frameLeft, relief = GROOVE, borderwidth = 2.5, yscrollcommand = scrollbar.set)
lbModules.pack(side = LEFT, fill = BOTH)
scrollbar.config(command = lbModules.yview)
for m in moduleList:
lbModules.insert(END, Checkbutton(lbModules, text = m).pack(side = TOP, fill = X, padx = 2, pady = 2))
** moduleList是一个字符串列表 **此外,如果我只将文本添加到ListBox,ScrollBar可以工作,但如果我添加CheckButton,ScrollBar不起作用。
答案 0 :(得分:2)
您只能将字符串插入列表框,滚动条仅影响使用.insert()
方法插入列表框的内容。您根本无法将复选框插入列表框。
在您的代码中,您尝试将pack
一个复选键添加到列表框中,但这与inserting
列表框中的复选框不同。虽然您可以在技术上将其他窗口小部件打包到列表框中,但它不会在列表框中“并且”不可滚动。
在您的特定情况下,您没有看到任何内容的原因 - 甚至是复选框名称 - 是因为您为每个复选框键入了None。在python中,当你执行foo().bar()
时,最终结果是最后一个命令bar()
的结果。因此,当您执行Checkbutton(...).pack(...)
时,结果是pack(...)
返回的任何内容,它始终为None。因此,lbModules.insert(Checkbutton(...).pack(...))
与执行lbModules.insert(None)
相同。