python - 如何使 tkinter 窗口居中并保留 "fit to children"行为?

标签 python tkinter

我有一个内容改变的窗口。有时内容比窗口大,因此窗口会扩展以适合其子项。但是,当我使用对“几何”的调用使窗口居中时,窗口不再调整大小。下面,您将找到说明这一点的代码。

如果注释掉延迟的 center() 函数调用,您会注意到窗口会扩展以适合其内容。如果保持原样,窗口居中,但不再扩展以适应其内容。

是否可以让窗口居中继续调整大小以适应其内容?

from Tkinter import *
import ttk

def center(root):
    w = root.winfo_screenwidth()
    h = root.winfo_screenheight()
    rootsize = tuple(int(_) for _ in root.geometry().split('+')[0].split('x'))
    x = w/2 - rootsize[0]/2
    y = h/2 - rootsize[1]/2
    root.geometry("%dx%d+%d+%d" % (rootsize + (x, y)))

root = Tk()
var = StringVar()
var.set('Small Text')

label = ttk.Label(root, textvariable=var)
label.grid(column=0, row=0)

# Change the text label in a couple of seconds.
def changeit():
    var.set('BIG TXT - ' * 5)
root.after(2000, changeit)

# Comment out this center call and the label expands.
root.after(100, lambda: center(root))
root.mainloop()

最佳答案

当您调用几何命令时,不要提供宽度和高度——只需提供 x/y 值。当你给它一个明确的宽度和高度时,你是在告诉 Tk “我希望窗口正好是这个大小”,所以它会关闭自动调整大小的行为。

root.geometry("+%d+%d" % (rootsize + (x, y)))

此外,您可以使用 winfo_width()winfo_height() 来获取窗口的实际大小,而不是解析 geometry< 的输出 方法。

关于python - 如何使 tkinter 窗口居中并保留 "fit to children"行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533532/

相关文章:

python - 如何以编程方式更改 Tkinter 标签的颜色?

python - 如何使 Python Tkinter 文本在按钮和标签中自动调整大小?

Python 使用 tkinter 在滚动文本框中搜索下一个单词

python - tktable 中的单元格为空白而不显示内容

python - 如何使用 python 在 {} 中循环字典

python - Django syncdb 锁定表创建

python - 使用 turtle 图形恢复 l-system 代码中的记录状态

python - 一旦对象满足特定条件就发送电子邮件

python - 将 cmd 构建到 Tkinter 窗口中

python - 多个按钮 Raspberry Pi