编程语言
首页 > 编程语言> > python-在Tkinter中自动换行的单行文本输入UI元素?

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