我有一个窗口,它的内容改变了。有时内容比窗口更大,因此窗口会扩展以适应其子窗口。但是,当我使用对“几何学”的调用对窗口进行居中时,该窗口不再调整大小。下面,您将找到说明这一点的代码。
如果您注释掉延迟的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()
发布于 2012-09-21 07:35:26
调用几何学命令时,不要提供宽度和高度--只需提供x/y值。当你给它一个显式的宽度和高度时,你告诉Tk“我希望窗口正好是这个大小”,所以它关闭了自动调整大小的行为。
root.geometry("+%d+%d" % (rootsize + (x, y)))
另外,您可以使用winfo_width()
和winfo_height()
来获取窗口的实际大小,而不是解析geometry
方法的输出。
https://stackoverflow.com/questions/12533532
复制