2014-09-13 32 views
2

我的用戶界面需要接受一行文本。但是,如果文本的長度超過UI元素的寬度,則文本應換行到下一行。在Tkinter中文字換行文字的單行文本輸入UI元素?

Tkinter Entry類提供了我正在尋找的有關接受單行文本的內容。但是,如果文本超出元素的寬度,則不會打包文本。相反,它向左滾動。這可以防止用戶看到前幾個字符是什麼。

Tkinter Text類支持自動換行,但它也允許用戶輸入換行符。我的文本需要作爲一行輸入。

我正在尋找中間的東西:一個接受單行文本(無換行符)的UI元素,但也會在輸入溢出元素的寬度時換行。

我有什麼選擇?

回答

1

有沒有這樣的小部件,但你可以這樣做:

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) 
+0

我覺得這個基本的想法會工作。它非常靈活。例如,可以對單詞邊界進行換行,限制文本長度或進行其他複雜的驗證。謝謝! – 2014-09-13 17:02:08

相關問題