我可能过度思考了这一点,但由于某种原因,我似乎无法弄清楚这一点。我试图将滚动条附加到我的文本字段,但无法这样做。这是代码段:
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有三个几何管理器:pack,grid和place。 通常建议使用包装和网格。
您可以使用grid manager's行和列选项 将滚动条定位在“文本”小部件旁边。
将Scrollbar小部件的命令选项设置为Text的yview方法。
scrollb = tki.Scrollbar(..., command=txt.yview)
将Text小部件的yscrollcommand选项设置为Scrollbar的set方法。
txt['yscrollcommand'] = scrollb.set
这是一个有效的例子:
import Tkinter as tki # Tkinter -> tkinter in Python3
class App(object):
def __init__(self):
self.root = tki.Tk()
# create a Frame for the Text and Scrollbar
txt_frm = tki.Frame(self.root, width=600, height=600)
txt_frm.pack(fill="both", expand=True)
# ensure a consistent GUI size
txt_frm.grid_propagate(False)
# implement stretchability
txt_frm.grid_rowconfigure(0, weight=1)
txt_frm.grid_columnconfigure(0, weight=1)
# create a Text widget
self.txt = tki.Text(txt_frm, borderwidth=3, relief="sunken")
self.txt.config(font=("consolas", 12), undo=True, wrap='word')
self.txt.grid(row=0, column=0, sticky="nsew", padx=2, pady=2)
# create a Scrollbar and associate it with txt
scrollb = tki.Scrollbar(txt_frm, command=self.txt.yview)
scrollb.grid(row=0, column=1, sticky='nsew')
self.txt['yscrollcommand'] = scrollb.set
app = App()
app.root.mainloop()
将Scrollbar缩小的部分是sticky='nsew'
,
您可以阅读→here或here。
现在对你有所帮助的东西是,不同的Tkinter小部件可以在同一个程序中使用不同的几何管理器,只要它们不共享同一个父级。
还值得一提的是有ScrolledText模块(在Python3中更名为tkinter.scrolledtext)。它包含一个类,也称为ScrolledText,它是一个复合小部件(Text&Scrollbar)。
# Python 2.7
import Tkinter as tki
from ScrolledText import ScrolledText
class App(object):
def __init__(self):
self.root = tki.Tk()
# create a Text widget with a Scrollbar attached
self.txt = ScrolledText(self.root, undo=True)
self.txt['font'] = ('consolas', '12')
self.txt.pack(expand=True, fill='both')
app = App()
app.root.mainloop()
如果你正在使用INPUT框,那么使用scrolledtext
函数的方便。我花了4个多小时找到它。不喜欢tkinter吗?
有两点需要注意......额外的导入需要将tkinter.scrolledtext导入为tkscrolled并使用insert
设置默认值并使用get
读取值(更可怕的命名)
这段代码是使我的20个字符宽的10行文本输入框工作的核心。
import tkinter.scrolledtext as tkscrolled
import tkinter as tk
default_text = '1234'
width, height = 20,10
TKScrollTXT = tkscrolled.ScrolledText(10, width=width, height=height, wrap='word')
# set default text if desired
TKScrollTXT.insert(1.0, default_text)
TKScrollTXT.pack(side=tk.LEFT)
滚动条一旦达到调用中定义的高度就会显示。它们变灰并且很好地融入背景中。一旦你找到正确的调用,它就会很好用.....
我希望这与你的问题有关!