TkInter ScrollBar不适用于ListBox

时间:2014-08-20 10:31:44

标签: python python-2.7 tkinter

这是我的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不起作用。

1 个答案:

答案 0 :(得分:2)

您只能将字符串插入列表框,滚动条仅影响使用.insert()方法插入列表框的内容。您根本无法将复选框插入列表框。

在您的代码中,您尝试将pack一个复选键添加到列表框中,但这与inserting列表框中的复选框不同。虽然您可以在技术上将其他窗口小部件打包到列表框中,但它不会在列表框中“并且”不可滚动。

在您的特定情况下,您没有看到任何内容的原因 - 甚至是复选框名称 - 是因为您为每个复选框键入了None。在python中,当你执行foo().bar()时,最终结果是最后一个命令bar()的结果。因此,当您执行Checkbutton(...).pack(...)时,结果是pack(...)返回的任何内容,它始终为None。因此,lbModules.insert(Checkbutton(...).pack(...))与执行lbModules.insert(None)相同。