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.
我该如何解决这个问题?
你必须做两件事才能让滚动条工作:
- 必须配置滚动条的
command
选项才能调用要滚动的widget的set
方法
- 您必须配置小部件的
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()
我正在尝试使用以下代码,但我 运行 遇到了问题,具体取决于我选择谁作为我的滚动条的主人。
我不知道该尝试什么,因为我找不到有类似问题的人。
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.
我该如何解决这个问题?
你必须做两件事才能让滚动条工作:
- 必须配置滚动条的
command
选项才能调用要滚动的widget的set
方法 - 您必须配置小部件的
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()