Python Tkinter 网格函数被忽略

Python Tkinter grid functions ignored

我觉得我在这里遗漏了一些非常明显的东西 - 当然小部件应该只位于根 window 的顶部,但它们完全忽略了 .grid() 功能。

当我打印 grid_size() 时,它返回 (0,0)。为什么?!

非常感谢任何帮助:)

title = tk.Label(root, text="Enter a city below")
title.grid(row=0, column=0)
title.pack()

e = tk.Entry(root)
e.grid(row = 0, column = 1)
e.pack()

current_clicker = ttk.Button(root, text = "Current forecast", command=current)
current_clicker.grid(row=0, column=2)
current_clicker.pack()

hourly_clicker = ttk.Button(root, text = "By hour", command=hourly)
hourly_clicker.grid(row=0, column=3)
hourly_clicker.pack()

minute_clicker = ttk.Button(root, text = "By minute", command=minute)
minute_clicker.grid(row=0, column=4)
minute_clicker.pack()

daily_clicker = ttk.Button(root, text = "Daily", command=daily)
daily_clicker.grid(row=0, column=5)
print(daily_clicker.grid_size())
daily_clicker.pack()

我相信您只需删除 pack()grid(..) 方法即可。不建议混用pack()grid(),因为这样可能会抹掉对方的影响而导致此类错误。

我建议摆脱 pack(),因为与 pack() 相比,grid(...) 是一种更有序的管理小部件的方式。

小例子:

hourly_clicker = ttk.Button(root, text = "By hour", command=hourly)
hourly_clicker.grid(row=0, column=3)

minute_clicker = ttk.Button(root, text = "By minute", command=minute)
minute_clicker.grid(row=0, column=4)

希望它解决了你的疑惑,如果还有错误,请告诉我

干杯

一次只有一个几何管理员可以管理一个小部件。就像问题的标题所说的那样,当您在调用 .grid(...) 之后调用 .pack() 时, grid(...) 的影响将被忽略。 对于任何给定的小部件,您只能使用一个,并且需要与具有相同 parent.

的所有小部件保持一致

packgridplace 是可用于放置小部件的 3 种方法。 tkinter 将这些称为“几何管理器”。其中每一个都提供了一种独特的方式来定位和缩放小部件。

  • pack 会将您的小部件停靠到定义的或可用的边缘
  • grid 表现得像 table
  • place 允许您定义任意位置(和大小)

一个单独的小部件不能有一个以上的几何管理器附加到它,父部件不能包含在 packgrid 之间交替的小部件。这意味着(例如),如果您有 Frame 个使用 pack 的小部件,那么 none 个小部件可以使用 grid 和 vise-versa。 place不受此限制,可以在任何地方使用。