作者:手机用户2502898863 | 来源:互联网 | 2024-11-04 20:46
在Python中,是否可以通过使用Tkinter或ttk库创建一个具有自动换行功能的多行标签,并使其宽度能够随着父容器的变化而动态调整?例如,在调整NotePad窗口宽度时,实现类似记事本的自动换行效果。这种功能在设计需要显示长文本的对话框时非常有用,确保文本内容能够完整且美观地展示。
是否可以创建一个带有自动换行的多行标签,该标签会与其父级的宽度同步调整大小?换句话说,当您更改NotePad窗口的宽度时,记事本的wordwrap行为.
用例是一个对话框,需要完整地呈现一行多行文本(指令),而不会剪切文本或使用滚动条.父容器将具有足够的垂直空间以容纳窄宽度.
我一直在尝试使用Tkinter Label和Message小部件以及ttk Label小部件而没有成功.似乎我需要硬编码像素激励值,而当这些控件的文本到达其容器的右边缘时,让这些控件自动进行自动换行.当然,Tkinters几何管理器可以帮我自动调整标签大小并相应地更新它们的wraplength值吗?
我应该看一下Text小部件吗?如果是这样,是否可以隐藏文本小部件的边框,以便我可以将其用作wordwrap的多行标签?
这是一个如何做我上面描述的原型的原型.它的灵感来自Bryan Oakley的使用Text小部件的提示以及Stackoverflow上的以下帖子:
In python’s tkinter, how can I make a Label such that you can select the text with the mouse?
from Tkinter import *
master = Tk()
text = """
If tkinter is 8.5 or above you'll want the selection background to appear like it does when the widget is activated. Comment this out for older versions of Tkinter.
This is even more text.
The final line of our auto-wrapping label that supports clipboard copy.
""".strip()
frameLabel = Frame( master, padx=20, pady=20 )
frameLabel.pack()
w = Text( frameLabel, wrap='word', fOnt='Arial 12 italic' )
w.insert( 1.0, text )
w.pack()
# - have selection background appear like it does when the widget is activated (Tkinter 8.5+)
# - have label background color match its parent background color via .cget('bg')
# - set relief='flat' to hide Text control borders
# - set state='disabled' to block changes to text (while still allowing selection/clipboard copy)
w.configure( bg=master.cget('bg'), relief='flat', state='disabled' )
mainloop()
解决方法:
不,Tk没有内置自动自动换行标签的功能.但是,它可以通过绑定到来实现.然后标签的事件和调整包裹长度.每次调整标签窗口小部件时,都会触发此绑定.
正如您所建议的那样,另一个选项是使用文本小部件.如果您愿意,可以完全关闭边界.当我想要包装文字的教学文本时,这一直是我的选择.