TkInter滚动条不适用于ListBox

2024-04-27 02:37:44 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的列表框和滚动条的代码。 滚动条显示在“我的框架”的右侧,但当项目列表框超出其区域时,滚动条将被禁用且不工作:

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是字符串列表 **另外,如果我只添加文本到列表框,滚动条可以工作,但是如果我添加了复选按钮,滚动条就不能工作。在


Tags: 代码leftfillsidepackgrooverelief列表框
1条回答
网友
1楼 · 发布于 2024-04-27 02:37:44

您只能在列表框中插入字符串,滚动条只影响使用.insert()方法插入到列表框中的内容。您不能简单地将checkbutton插入到列表框中。在

在代码中,您试图将复选按钮pack添加到列表框中,但这与inserting列表框中的复选框不同。虽然从技术上讲,您可以将其他小部件打包到列表框中,但它不会“在”列表框中,也不会滚动。在

在您的特定情况下,您什么也看不到,甚至连复选框名称都看不到,因为您为每个checkbutton插入了None。在python中,当您执行foo().bar()时,最终结果是最后一个命令bar()的结果。因此,当您执行Checkbutton(...).pack(...)操作时,结果是pack(...)返回的任何结果,它总是无。所以,lbModules.insert(Checkbutton(...).pack(...))和做lbModules.insert(None)是一样的。在

相关问题 更多 >