我对python很新(只是尝试用他们在工作时给我的新pie3做一些事情)并且大部分时间都在关注它如何工作的YouTube视频。但是,一旦我开始全屏操作,我就遇到了网格布局的问题。在以下代码中:
from tkinter import *
root = Tk()
root.attributes('-fullscreen', True)
root.configure(background='grey')
wind_frame = Frame(root, bg="grey")
qnh_frame = Frame(root, bg="grey")
wind_frame.grid(row=0)
qnh_frame.grid(row=0, column=1)
label_wind = Label(wind_frame, text="WIND", font=("Arial", 80), bg="grey")
label_wind.grid(row=0, column=0, padx=(100,600))
label_qnh = Label(qnh_frame, text="QNH", font=("Arial", 80), bg="grey")
label_qnh_hpa = Label(qnh_frame, text="10000", font=("Arial", 50), bg="grey")
label_qnh_temp = Label(qnh_frame, text="30C", font=("arial", 50), bg="grey")
label_qnh.grid(row=0, column=1, sticky=W)
label_qnh_hpa.grid(row=6, column=1, sticky=W)
label_qnh_temp.grid(row=10, column=1, sticky=W)
root.mainloop()
WIND标题被推下多行。难道我做错了什么? 我认为创建两个帧会使每个帧内的格式内容彼此独立。
答案 0 :(得分:1)
你是正确的,使用两个框架意味着你可以独立地在每个框架中布置小部件。
使用grid
时,项目将以提供给它们的空间为中心。由于qnh帧比wnd帧高,所以在单元格中有额外的空间。在开发时可视化的一种简单方法是为每个框架提供独特的颜色。通过这样做,可以更容易地看到它是移动的帧还是帧的内容。一旦您正常工作并正确调整大小,您可以重置颜色,因为它们不会影响布局。
在这种情况下,您会看到它不是向下移动的标题,而是整个框架。该行对于第一列中的内容而言太高,因此在框架上方和下方存在间隙。通常情况下,您需要框架来坚持"坚持"给予它的空间的所有边缘,所以没有间隙。例如:
wind_frame = Frame(..., background="pink")
wind_frame.grid(row=0, sticky="nsew")
这解决了当前的问题,但是当您编写更多代码时,您还会遇到其他问题。默认情况下,每行和每列的权重为零,这意味着如果有任何额外的空间,它将不使用。作为一般经验法则,当您使用网格将小部件放置在父窗口小部件中时,您必须始终在父级上调用grid_columnconfigure
和grid_rowconfigure
至少一行和一列,并给出该行并列一个正重量。这将告诉tkinter"给这行(或列)提供任何额外的空间"。
在您的示例代码中,您应该在root上执行此操作(因为您在根中放置了框架),并且在两个主框架中的每一个上都这样做(因为您将小部件放在框架中)。
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
...
使用网格,您可以在空行和列上使用rowconfigure
和columnconfigure
。例如,如果您希望在GUI的底部显示任何额外的空间,您可以将最后一行之后的行设置为具有正权重,并且所有额外空间将显示在那里而不是给予其他小部件。