Tkinter 中的滚动条不滚动列表框或删除它

Scrollbar in Tkinter not scrolling listbox or deleting it

我正在尝试使用以下代码,但我 运行 遇到了问题,具体取决于我选择谁作为我的滚动条的主人。

我不知道该尝试什么,因为我找不到有类似问题的人。

fr = Frame(root)
fr.grid(row=0, column=0, sticky=N)
fr2 = Frame(root, height=34)
fr2.grid(row=0, column=1, sticky=N)

text_area = Listbox(fr2, width = 28, height= 34)
text_area.grid(row=0, column=0, rowspan=20)

sb = Scrollbar(fr2)
sb.grid(column=1, row=0)

text_area.config(font = ("Courier New", 12), yscrollcommand = sb)

如果我用fr2作为sb的主人,我的滚动条显得很小,不滚动text_area(虽然我的鼠标滚轮和up/down键是能够。) https://imgur.com/R5WDv87.

如果我使用 text_area 作为主控,但是 text_area 只是被删除 https://imgur.com/aXvH1J3.

我该如何解决这个问题?

你必须做两件事才能让滚动条工作:

  1. 必须配置滚动条的command选项才能调用要滚动的widget的set方法
  2. 您必须配置小部件的 yscrollcommand 选项才能更新滚动条。

此外,列表框中没有任何内容,因此滚动条将不起作用,因为没有可滚动的内容。

要使滚动条垂直填充 space,如果您使用 grid,则需要使用 sticky 选项。它还需要跨越与其控制的小部件相同的行数,假设您希望它们具有相同的高度。

这是一个基于您的代码的工作示例:

from tkinter import *

root = Tk()

fr = Frame(root)
fr.grid(row=0, column=0, sticky=N)
fr2 = Frame(root, height=34)
fr2.grid(row=0, column=1, sticky=N)

text_area = Listbox(fr2, width = 28, height= 34)
text_area.grid(row=0, column=0, rowspan=20)

sb = Scrollbar(fr2, command=text_area.yview)
sb.grid(column=1, row=0, sticky="ns", rowspan=20)

text_area.config(font = ("Courier New", 12), yscrollcommand = sb.set)

for i in range(100):
    text_area.insert("end", "item #{}".format(i))

root.mainloop()