Python 3.x Python3.3Tkinter:有没有办法使用.grid几何体将小部件移动到屏幕的中心?

Python 3.x Python3.3Tkinter:有没有办法使用.grid几何体将小部件移动到屏幕的中心?,python-3.x,tkinter,geometry,Python 3.x,Tkinter,Geometry,在Python3.3的tkinter中,有没有办法使用.grid geometry将小部件移动到屏幕中央?即使在更改行和列时,所有内容都位于左上角。(Python、stackoverflow和一般的编码都是新的)。 谢谢在tkinter模块中,您可以使用.grid方法将小部件集中在屏幕上: Label(master, text="First") Label.grid(row=0, column=1) Label2(master, text="Second") Label2.grid(row=1

在Python3.3的tkinter中,有没有办法使用.grid geometry将小部件移动到屏幕中央?即使在更改行和列时,所有内容都位于左上角。(Python、stackoverflow和一般的编码都是新的)。
谢谢

在tkinter模块中,您可以使用.grid方法将小部件集中在屏幕上:

Label(master, text="First")
Label.grid(row=0, column=1)

Label2(master, text="Second")
Label2.grid(row=1, column=1)
但是我会使用.place函数;这将允许您在希望小部件所在的位置写入坐标

Label(master, text="First")
Label..place(x=20, y=30)

Label2(master, text="Second")
Label2..place(x=20, y=50)

在移动小部件时,这种.place方法更易于维护。

如果您不必使用网格几何体管理器,也可以尝试使用。 Pack会自动将小部件放置在窗口的中心,如果您继续“打包”它们而不指定任何特定位置,则会将新小部件放置在第一个小部件的下方

如果要指定小部件的位置,也可以在.pack()调用中指定,但选项有限

这里有一个例子:

Mywidget.pack(side=TOP)

side=只允许您几个选项,例如顶部、底部、左侧和右侧

我不知道这对您来说是否太有限,但如果您是Python新手,在我看来,pack比grid要简单一些。尽管您可能需要网格来更复杂地放置小部件,等等。

网格(以及放置和打包)可以用于将小部件放置在其父部件的中心。如果您询问物理屏幕的中心,最好使用
wm_geometry
将窗口移动到物理中心

如果您真的想使用网格,并且希望将单个小部件放置在其父窗口的中心,请将其放置在第1行第1列,并为周围的行和列指定权重1(1)。这将保证边将随着窗口大小的调整而增长和收缩

最有可能发生的情况是,您试图将一个小部件放在某个随机网格单元中,但小部件仍然显示在角落中。这是因为其他单元格不存在——默认情况下,行和列的宽度和高度为零,因此,即使在第10000行中放置了一些内容,如果其他9999行中没有内容,第10000行也将显示在顶部。更令人困惑的是,默认情况下,行和列不会随着窗口的增长而增长

这实际上只是实验时的一个问题。实际上,您的所有行和列中通常都有小部件,因此这些行和列的宽度不会为零

这里有一个有效的例子。注意,当您调整窗口时,标签位于中间。这项工作的关键是我给了所有行和列一个权重,除了中间的一行和一列,所以它们占据了所有额外的空间,这使得唯一的小部件留在了中间

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.label = tk.Label(self, text="I am centered!")
        self.label.grid(row=1, column=1, sticky="nsew")
        self.grid_rowconfigure(0, weight=1)
        self.grid_rowconfigure(2, weight=1)
        self.grid_columnconfigure(0, weight=1)
        self.grid_columnconfigure(2, weight=1)

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()

当你说“移动小部件到屏幕的中心”时,你是指物理显示的中心,还是集中在它们各自的父窗口中?你关于包放置在中间的东西的评论是不正确的。你自己的例子表明,它将把它放在顶部或底部(或一侧)。我明白你为什么这么想,但它将它们放在窗口的中心(中间)。它们可能在顶部,也可能在底部,但它们仍然位于所处“行”的中心。如果你明白我的意思。它们不是放在窗户的中间,而是放在中间。。啊专栏?可以这么说吗?很难表达清楚。
import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.label = tk.Label(self, text="I am centered!")
        self.label.grid(row=1, column=1, sticky="nsew")
        self.grid_rowconfigure(0, weight=1)
        self.grid_rowconfigure(2, weight=1)
        self.grid_columnconfigure(0, weight=1)
        self.grid_columnconfigure(2, weight=1)

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()