python-在Tkinter中自动换行的单行文本输入UI元素?
作者:互联网
我的用户界面需要接受一行文字.但是,如果文本的长度超过UI元素的宽度,则文本应换行到下一行.
Tkinter Entry类给出了我在接受单行文本方面正在寻找的东西.但是,如果文本超出元素的宽度,则文本不会被换行.而是向左滚动.这样可以防止用户看到前几个字符是什么.
Tkinter Text类支持自动换行,但它也允许用户输入换行符.我的文本需要单行输入.
我正在寻找介于两者之间的东西:一个UI元素,它接受单行文本(无换行符),但是当输入溢出元素的宽度时也进行换行.
我有什么选择?
解决方法:
没有此类小部件,但是您可以执行以下操作:
import tkinter as tk
class ResizableText:
def __init__(self, text_max_width=20):
self.text_width = text_max_width
self.root = tk.Tk()
self.text = tk.Text(self.root, width=self.text_width, height=1)
self.text.pack(expand=True)
self.text.bind("<Key>", self.check_key)
self.text.bind("<KeyRelease>", self.update_width)
self.root.mainloop()
def check_key(self, event):
# Ignore the 'Return' key
if event.keysym == "Return":
return "break"
def update_width(self, event):
# Get text content; ignore the last character (always a newline)
text = self.text.get(1.0, tk.END)[:-1]
# Calculate needed number of lines (=height)
lines = (len(text)-1) // self.text_width + 1
# Apply changes on the widget
self.text.configure(height=lines)
标签:tkinter,word-wrap,python 来源: https://codeday.me/bug/20191029/1957825.html