2
我正在尝试使用tkinter小部件制作可滚动的文本。我希望滚动条仅在需要时出现(当我的文本小部件的一部分不可见时)。
我的程序会搜索每一个输入,如果是这样的话,如果它是滚动条出现,如果它不是。
它第一次运行良好,但如果我删除一些文本(所以滚动条消失),然后写一些,滚动条出现,但没有滑块!Python Tkinter Scrollable Text,滑块不出现
#-*-coding:latin-1-*
from tkinter import *
class TextScrollbar(Frame):
"""
A Text widget which can be scrolled.
Text widget with a scrollbar appearing only when you need it
(when there is text that you can see)
Use self.Text to acccess to your Text widget
"""
def __init__(self, master=None, cnf={}, **kw):
#Creat a Frame which will contain the Text and the Scrollbar widget
Frame.__init__(self, master=None, cnf={}, **kw)
#Creat Scrollbar widget
self.ScrollBar=Scrollbar(self, orient='vertical')
#Creat Text widget
self.Text=Text(self, cnf={}, **kw)
#Link between Text and Scrollbar widgets
self.Text.config(yscrollcommand=self.ScrollBar.set)
self.ScrollBar.config(command=self.Text.yview)
#Distribution of the Text widget in the frame
self.Text.pack(side='left', fill=BOTH, expand=1)
def _typing(event):
"""Check whether you need a scrollbar or not"""
if Text.ScrollBar.get()==(0.0, 1.0):
self.ScrollBar.pack_forget()
else:
self.ScrollBar.pack(side='right', fill=Y, expand=1)
self.Text.bind('<Key>',_typing)
root=Tk()
Text=TextScrollbar(root)
Text.pack(fill=BOTH, expand=1)
我仍然不知道为什么它没有工作,但通过它的工作原理.grid梅索德更换.pack梅索德,这里是更新的代码
#-*-coding:latin-1-*
from tkinter import *
class TextScrollbar(Frame):
"""
A Text widget which can be scrolled.
Text widget with a scrollbar appearing only when you need it
(when there is text that you can see)
Use self.Text to acccess to your Text widget
"""
def __init__(self, master=None, cnf={}, **kw):
#Creat a Frame which will contain the Text and the Scrollbar widget
Frame.__init__(self, master=None, cnf={}, **kw)
self.grid_columnconfigure(0, weight=1)
self.grid_rowconfigure(0, weight=1)
#Creat Scrollbar widget
self.Scrollbar=Scrollbar(self, orient='vertical')
#Creat Text widget
self.Text=Text(self, cnf={}, **kw)
#Link between Text and Scrollbar widgets
self.Text.config(yscrollcommand=self.Scrollbar.set)
self.Scrollbar.config(command=self.Text.yview)
#Distribution of the Text widget in the frame
self.Text.grid(row=0, column=0, sticky=N+S+E+W)
def TypingAndResizing(event):
"""Check whether you need a scrollbar or not"""
if Text.Scrollbar.get()==(0.0, 1.0):
self.Scrollbar.grid_forget()
else:
self.Scrollbar.grid(row=0, column=1, sticky=S+N)
self.Text.bind('<KeyRelease>', TypingAndResizing)
self.Text.bind('<Configure>', TypingAndResizing)
root=Tk()
Text=TextScrollbar(root)
Text.pack(fill=BOTH, expand=1)
你确定这是你的真实密码吗? “行”,“列”和“粘性”不是'pack'的有效选项。 –
事实上,这是因为我尝试与网格,我忘记改变。它已完成并更新了正确的代码 –
您的绑定在插入新角色之前发生,因此它总会滞后一点。如果你在''而不是''上绑定,它会更好吗? –