Tkinter具有三个几何管理器:pack、grid和place。
通常建议使用包装和网格。
您可以使用网格管理器的 行和列选项
将滚动条放置在文本小部件旁边。
将Scrollbar小部件的命令选项设置为 Text 的yview方法。
scrollb = tkinter.Scrollbar(..., command=txt.yview)
将Text小部件的yscrollcommand选项设置为 Scrollbar 的set方法。
txt['yscrollcommand'] = scrollb.set
这是一个使用ttk的工作示例:
import tkinter
import tkinter.ttk as ttk
class TextScrollCombo(ttk.Frame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# ensure a consistent GUI size
self.grid_propagate(False)
# implement stretchability
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
# create a Text widget
self.txt = tkinter.Text(self)
self.txt.grid(row=0, column=0, sticky="nsew", padx=2, pady=2)
# create a Scrollbar and associate it with txt
scrollb = ttk.Scrollbar(self, command=self.txt.yview)
scrollb.grid(row=0, column=1, sticky='nsew')
self.txt['yscrollcommand'] = scrollb.set
main_window = tkinter.Tk()
combo = TextScrollCombo(main_window)
combo.pack(fill="both", expand=True)
combo.config(width=600, height=600)
combo.txt.config(font=("consolas", 12), undo=True, wrap='word')
combo.txt.config(borderwidth=3, relief="sunken")
style = ttk.Style()
style.theme_use('clam')
main_window.mainloop()
解决您的Scrollbar较小的部分是sticky='nsew'
,您可以在此处
阅读 → 。
现在对您有所帮助的是,不同的Tkinter小部件可以在同一程序中使用不同的几何管理器,只要它们不共享相同的父级。
tkinter.scrolledtext模块包含一个名为ScrolledText的类,它是一个复合小部件(文本和滚动条)。
import tkinter
import tkinter.scrolledtext as scrolledtext
main_window = tkinter.Tk()
txt = scrolledtext.ScrolledText(main_window, undo=True)
txt['font'] = ('consolas', '12')
txt.pack(expand=True, fill='both')
main_window.mainloop()
这种实现方式值得一看。