有没有办法在Python 3.3的tkinter中使用.grid几何将小部件移动到屏幕的中心?即使在更改行和颜色时,一切都在左上方。 (Python新手,stackoverflow和编码)。 谢谢
答案 0 :(得分:0)
在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方法更容易维护。
答案 1 :(得分:0)
如果您没有使用网格几何管理器,您也可以试用pack。 Pack会自动将小部件放在窗口的中央,如果您继续打包,则会将新的小部件放在第一个小部件的下方。他们没有指定任何特定的位置。
如果您想指定窗口小部件的位置,您也可以在.pack()调用中执行此操作,但您的选项受限制。
以下是一个例子:
Mywidget.pack(side=TOP)
Mywidget.pack(side=BOTTOM)
side =允许你 只有几个选项 ,例如 TOP , BOTTOM , LEFT , RIGHT
我不知道这对你来说是否过于局限,但如果你是Python的新手,那么打包在我看来比网格要简单一些。虽然您可能需要网格来获得更复杂的小部件展示位置,等等。
答案 2 :(得分:0)
Grid(以及place和pack)可用于将窗口小部件放置在其父级的中心。如果您询问物理屏幕的中心,您可以使用wm_geometry
将窗口移动到物理中心。
如果您确实想要使用网格,并且希望将单个窗口小部件放在其父窗口的中心,请将其放在第1行第1列中,并为周围的行和列赋予权重1(一)。这将保证在窗口调整大小时边缘会增大和缩小。
最有可能发生的事情是你试图将一个小部件放在一个随机网格单元格中,但小部件仍然出现在角落里。这是因为其他单元格不存在 - 默认情况下,行和列的宽度和高度均为零,因此即使您在第10,000行放置某些内容,如果其他9,999行中没有任何内容,则行10,000将出现在顶部。更令人困惑的是,默认情况下,随着窗口的增长,行和列不会增长。
这实际上只是一个问题。实际上,您通常在所有行和列中都有小部件,因此这些行和列的宽度不会为零。
这是一个有效的例子。请注意,在调整窗口大小时,标签会保留在中间位置。使这项工作成功的是我给所有行和列赋予了权重,除了中心行之外,所以它们占用了所有额外的空间,使得唯一的小部件位于中心。
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()