一尘不染

如何将滚动条附加到文本小部件?

python

我试图将滚动条附加到“文本”字段,但无法这样做。这是代码段:

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)

这段代码在我的文本字段旁边放置了一个非常小的滚动条(并且非常小,我的意思是您可以看到向上和向下箭头,但中间没有看到)。当文本字段填满时,我可以使用它滚动,但是至少有一种方法可以设置滚动条的高度,以使其看起来与文本字段的高度相同吗?


阅读 152

收藏
2020-12-20

共1个答案

一尘不染

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'
你可以阅读→这里

现在,对您有所帮助的事情是,不同的 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()

这是方法实现是值得考虑看看。

2020-12-20