3
我有一個tk.Text
類,它的高度(不是它的寬度,由父級決定)與它的文本數量相符。它適用於文本的一個實例,但不是多個文本 - 看起來self.resize
函數不再在第一個文本框中調用。這可能是因爲我還沒有完全理解tkinter中的bindtags
概念。任何幫助,將不勝感激。謝謝。tkinter.Text符合文本大小不適用於多個實例
import tkinter as tk
class ResizedText(tk.Text):
def __init__(self, parent, *args, **kwargs):
self.parent = parent
self.container_container = tk.Frame(parent, bg="blue")
self.container = tk.Frame(self.container_container, bg="red")
super().__init__(self.container, *args, **kwargs)
bindtags = list(self.bindtags())
bindtags.insert(0, "custom")
self.bindtags(tuple(bindtags))
self.bind_class("custom", "<KeyRelease>", self.resize)
self.container_container.bind("<Configure>", self.resize)
def grid(self, *args, **kwargs):
self.container_container.grid(*args, **kwargs)
self.container.grid(row=0, column=0)
self.container.grid_propagate(False)
super().grid(row=0, column=0, sticky="nsew")
self.container.grid_columnconfigure(0, weight=1)
def resize(self, event=None):
self.container.config(width=self.container_container.winfo_width())
if self.bbox("end-1c"):
text_height = (self.bbox("end-1c")[1]+self.bbox("end-1c")[3])+4
if text_height < 20: text_height = 20
else: text_height = 20
self.container.config(height=text_height)
GUI = tk.Tk()
f = ResizedText(GUI, wrap="word")
f.grid(row=0, column=0, sticky="ew")
g = ResizedText(GUI, wrap="word")
g.grid(row=1, column=0, sticky="ew")
GUI.grid_columnconfigure(0, weight=1)
我想在_class_到''中創建一個綁定,但我還必須有一個到_instance_的外部綁定,也有''。這是否意味着我仍然需要製作自定義綁定標籤? –
claust
@claust:我不確定如何在一個小小的評論框中回答這個問題。如果您要將事件綁定到特定的實例(問題中的代碼正在做什麼),那麼您需要爲每個實例定製一個綁定標記。如果您的綁定函數可以被重寫爲使用'event.widget'而不是'self',那麼您只需要綁定到類方法或全局函數的單個綁定標籤。 –