我从另一个问题中获得了大部分附加代码。我正在使用Python 3.8。似乎Pack Manager将轻松地将滚动条窗口小部件添加到列表框窗口小部件。但是,我正在使用网格管理器。我无法使垂直滚动条正常工作。
运行此代码时,将出现一个垂直滚动条,但实际上并没有正确地连接到列表框小部件。顺便说一句:我使水平滚动条正常工作。
from tkinter import *
master = Tk()
listbox = Listbox(master)
scrollbar = Scrollbar(master, orient=VERTICAL)
scrollbar.grid(row=2, rowspan=50, column=40, sticky=N + S)
for i in range(50):
listbox.insert(END, str(i))
listbox.grid(sticky="news")
scrollbar.config(command=listbox.yview)
mainloop()
您应该对两个元素都使用row=
和column=
-放在同一行和不同列中。
您忘记了tk.Listbox(..., yscrollcommand=scrollbar.set)
您不必为rowspan=50
使用Scrollbar
-即使您插入50行文本,Listbox
也只使用一行。
import tkinter as tk # `import *` is not preferred (see PEP8)
master = tk.Tk()
scrollbar = tk.Scrollbar(master, orient='vertical')
scrollbar.grid(row=2, column=1, sticky='ns')
listbox = tk.Listbox(master, yscrollcommand=scrollbar.set)
for i in range(50):
listbox.insert('end', str(i))
listbox.grid(row=2, column=0, sticky="news")
scrollbar.config(command=listbox.yview)
master.mainloop()
如果您认为pack()
更容易,则可以在pack
内使用Listbox
,Scrollbar
和Frame
,然后在框架上使用grid()
:
import tkinter as tk
master = tk.Tk()
frame = tk.Frame(master)
frame.grid(row=0, column=0) # set row and column to the desired position
listbox = tk.Listbox(frame)
listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=listbox.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
listbox.config(yscrollcommand=scrollbar.set)
for i in range(50):
listbox.insert(tk.END, str(i))
master.mainloop()