Python Tkinter网格函数被忽略

问题描述

我觉得这里缺少一些显而易见的东西-当然,这些小部件应该只放在根窗口的顶部,但是它们完全忽略了.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(),因为与grid(...)相比,pack()是一种更加有序的小部件管理方式。

小例子:

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)

希望它能解决您的疑问,如果还有其他错误,请告诉我

欢呼

,

一次只有一个几何管理器可以管理一个小部件。因此,就像问题的标题所说的一样,当您在调用.pack()之后再调用.grid(...)时,grid(...)的作用将被忽略。 对于任何给定的小部件,您只能使用一个,并且必须与具有相同父级的所有小部件保持一致。

,

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

  • pack会将您的窗口小部件停靠在已定义或可用的边缘
  • grid的行为就像桌子一样
  • place允许您定义任意位置(和大小)

单个小部件不能附加多个几何图形管理器,父级不能包含在packgrid之间交替的小部件。举例来说,这意味着,如果您有Frame个充满pack的小部件,则这些小部件都不能使用grid,反之亦然。 place不受此限制,可以在任何地方使用。