我正在编写一个小部件来显示一些文本行(通过Label
中的Frame
),一旦文本高度大于包含的Frame
的高度,就需要调整字体大小。在
为了做到这一点,我在文本更新后查询.winfo_reqheight()
和{
无论如何,我编写了一个测试脚本来实现这个特性,但是我得到的Frame
的高度与{
在实践中:准则
import Tkinter as tk
class App():
def __init__(self):
self.root = tk.Tk()
self.root.geometry("200x200")
self.f = tk.Frame(self.root)
self.f.pack(expand=True, fill=tk.BOTH)
self.l = tk.Label(self.f)
self.l.pack(expand=True, fill=tk.BOTH)
self.root.bind("q", func=self.addline)
self.counter = 0
def addline(self, event):
mylist = list()
self.counter += 1
for _ in range(self.counter):
mylist.append("hello")
message = '\n'.join(mylist)
self.l.configure(text=message, font=('Arial', 30))
print("frame: {0} label {1}".format(self.f.winfo_reqheight(), self.l.winfo_reqheight()))
App().root.mainloop()
三次按下q
显示后
和输出
^{pr2}$看看Frame
的大小是如何一次完成的?尽管两个小部件同时被查询,但这种行为的原因是什么?在
在事件处理程序返回之前,在其中所做的更改不会更新。在
但您可以使用^{} 强制更新:
更新
^{} documentation 还提到
update_idletasks
:相关问题 更多 >
编程相关推荐