我试图将滚动条附加到“文本”字段,但无法这样做。这是代码段:
self.scroller = Scrollbar(self.root) self.scroller.place(x=706, y=121) self.outputArea = Text(self.root, height=26, width=100) self.outputArea.place(x=0, y=120) self.scroller.config(command=self.outputArea.yview) self.outputArea.config(state=DISABLED, yscrollcommand = self.scroller.set)
这段代码在我的文本字段旁边放置了一个非常小的滚动条(并且非常小,我的意思是您可以看到向上和向下箭头,但中间没有看到)。当文本字段填满时,我可以使用它滚动,但是至少有一种方法可以设置滚动条的高度,以使其看起来与文本字段的高度相同吗?
Tkinter具有三个 几何管理器 :包装,网格和位置。 通常建议将包装和网格放在适当的位置。
您可以使用 网格管理器的 行 和 列 选项 将 滚动条放置 在“ 文本” 小部件旁边。
将“ 滚动条” 小部件的 命令 选项设置为“文本”的 yview 方法。
scrollb = tkinter.Scrollbar(..., command=txt.yview)
将“ 文本” 小部件的 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()
这将解决您的部分 滚动条 是小的sticky='nsew', 你可以阅读→这里。
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()
这是方法实现是值得考虑看看。