文本窗口小部件上的Python Tkinter ttk滚动条无法缩放

时间:2018-12-15 17:34:59

标签: python python-3.x tkinter ttk

只需学习tkinter并发现一些奇怪的行为即可。我的垂直滚动条是浅灰色的,并且包含一个深灰色的矩形,该矩形在该栏中上下移动以显示进度。此代码首次执行时,没有深灰色的进度矩形。当我按下进度条的向下箭头时,会出现一个深灰色框,但会一直停留在滚动条的顶部,直到我一直滚动到文本的底部。只有这样,滚动条才似乎可以确定框中的文本量,深灰色进度矩形会跳到滚动条的底部并从那里开始正确工作。我在Windows计算机上,并使用python 3在Jupyter Notebook中执行此操作。

是否可以通过某种方式初始化滚动条,使其知道要处理多少文本?

 from tkinter import *
 from tkinter import ttk

 root = Tk()
 root.title('Twitter Timeline')

 f = ttk.Frame(root, padding = '3 3 12 12')
 f.grid(column=0, row=0, sticky=(N,W,E,S))
 root.columnconfigure(0, weight=1)
 root.rowconfigure(0, weight=1)

 t = Text(f, width= 100,  wrap='word')
 t.grid(column = 0, row = 2, sticky="nsew")
 t.insert(INSERT, "Begin " + "This is a test " * 800 + " END")

 s = ttk.Scrollbar(root, orient=VERTICAL, command=t.yview)
 s.grid(column=1, row=0, sticky='nsew')
 t['yscrollcommand'] = s.set

 for child in f.winfo_children(): 
     child.grid_configure(padx=5, pady=5)

 root.mainloop()

1 个答案:

答案 0 :(得分:1)

男孩,这很难。原来,当您的文字仅由很长的一行组成时,滚动条会产生怪异的反应。尝试插入带有换行符的文本:

t.insert(INSERT, "Begin " + "This is a test \n" * 800 + " END")

,它将像魅力一样工作。

这似乎是grid()的一个问题,因为如果您改用pack(),也可以用一个长行,那么效果很好...我不确定为什么。