学习Python。 tkinter窗口小部件遇到麻烦。网格管理器并将滚动条添加到列表框窗口小部件

问题描述 投票:0回答:2

我从另一个问题中获得了大部分附加代码。我正在使用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()
python tkinter listbox grid pack
2个回答
0
投票

您应该对两个元素都使用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()

PEP 8 -- Style Guide for Python Code


0
投票

如果您认为pack()更容易,则可以在pack内使用ListboxScrollbarFrame,然后在框架上使用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()
© www.soinside.com 2019 - 2024. All rights reserved.