tkinter 增长框架以适应内容

tkinter grow frame to fit content

我正在尝试根据其内容动态调整 tk-window 的大小。

所以我认为 2 秒后 tk-window 应该显示长文本。 但我得到的是,2 秒后 window 在 X 轴上变得足够大,但在 Y 轴上只大一点点。我只看到字母 'a' 而不是全文。

我试过扩展和填充,但 window 大小不会改变。 有人能指出为什么 window-size 不适应标签尺寸吗? 我在 Kubuntu 17.0.4 上 运行 Python 3.5.3 使用 tk 8.6.6

import tkinter as tk

def doIt():
    label.configure(text="text\na\n\n\n This is very long")

root = tk.Tk()
label=tk.Label(root,text="before")
label.pack()
root.after(2000,doIt)
root.mainloop()

I tried messing around with expand and fill, but the window size wont't change.

我不知道你是怎么做到的,但是将这两个选项设置为正确的值会给你预期的结果:

import tkinter as tk

def doIt():
    label.configure(text="text\na\n\n\n This is very long")

root = tk.Tk()
label=tk.Label(root,text="before")
label.pack(fill=tk.BOTH, expand=True) # I changed this
root.after(2000,doIt)
root.mainloop()

输出(2 秒后):

现在让我们用更长的文本进行测试:

def doIt():
    label.configure(text="text\na\n\n\n This is very long This is very long This is very long \n\n\nThis is very long This is very long")

2秒后输出:

这已被确认为Kubuntu环境下的problem/inconsitency。我创建了一个 bugreport 在 tk 票务系统上。 作为解决方法,您可以使用以下代码(Ethan 很接近):

import tkinter as tk

def doIt():
    label.configure(text="text\na\n\n\n This is very long")

root = tk.Tk()
root.update() # This is the workaround
label=tk.Label(root,text="before")
label.pack()
root.after(2000,doIt)
root.mainloop()