Mal*_*olm 5 python windows tkinter ttk
是否可以创建带有自动换行的多行标签,并与其父级的宽度同步调整大小?换句话说,当您更改记事本窗口的宽度时,记事本的自动换行行为。
用例是一个对话框,需要完整显示一个多行文本块(指令),而不会剪切文本或使用滚动条。父容器将具有足够的垂直空间以适应狭窄的宽度。
我一直在尝试使用Tkinter标签和消息小部件以及ttk标签小部件,但均未成功。似乎我需要对像素的wraplength值进行硬编码,而让这些控件在文本到达容器的右边缘时自动自动换行。当然,Tkinters几何管理器可以帮助我自动调整标签大小并相应地更新其包裹长度值吗?
我应该看一下Text小部件吗?如果是这样,是否可以隐藏“文本”小部件的边框,以便可以将其用作带有自动换行的多行标签?
这是一个人如何做我上面描述的原型。它的灵感来自Bryan Oakley的技巧,该技巧使用了Text小部件以及Stackoverflow上的以下文章: 在python的tkinter中,我如何制作一个Label,以便可以用鼠标选择文本?
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()
Run Code Online (Sandbox Code Playgroud)
不,Tk 没有内置自动换行标签的功能。但是,可以通过绑定到<Configure>标签的事件并调整包裹长度来实现。每次调整标签小部件的大小时都会触发此绑定。
正如您所建议的,另一个选项是使用文本小部件。如果您愿意,可以完全关闭边界。当我想要自动换行的教学文本时,这一直是我的选择。