【发布时间】:2017-12-13 12:35:16
【问题描述】:
我想创建一个类似于 Label 的对象,但是我希望它也可以选择用于复制粘贴。我已经使用 Text 小部件这样做了:
class CopyLabel (Text):
def __init__ (self, master, text = '', font = None):
if font is None:
super().__init__(master = master, height = 1,
borderwidth = 0, width = len(text),
bg = master['background'])
else:
super().__init__(master = master, height = 1,
borderwidth = 0, font = font,
width = len(text), bg = master['background'])
self.insert(1.0, text)
self.configure(state = 'disabled')
我最终用一个网格来显示这个小部件。但是,我随机发现最后 1 或 2 个字符没有显示。在对此进行调查时,似乎 Text 小部件正在将这些字符拆分为新行(选择文本时,可以向下拖动以查看第二行)。最大的问题是这种拆分的不可预测性(我尝试过 width = len(text) + 2,但我仍然偶尔会遇到这种行拆分行为)。有没有办法纠正这种行为?
编辑:设置 wrap = 'none' 修复了行拆分行为,但文本仍然被截断。现在我必须水平滚动而不是垂直滚动才能看到文本,但我想这与我提出的问题不同。
【问题讨论】:
-
也许wrap="none" -
tk.Text(root, wrap='none')? -
您必须使用Scrollbar 来滚动它。或使用ttk.scrolledtext
-
更正:ttk.scrolledtext 只有垂直滚动条,所以你必须使用
Scrollbar和Text -
如果是一行,为什么不使用 Entry 小部件?它专门设计了一个单行输入。
-
实际上,我刚刚意识到是什么导致了问题。我正在更改文本的字体。由于并非所有字体的宽度都相同,因此它一直在切断一些文本。如果字体未更改,CopyLabel 小部件将按预期工作。
标签: python python-3.x tkinter