我试图得到一个tkinter gui,让用户登录我真的是tkinter新手。我制作了一个框架,当我使用网格在框架内放置另一个框架小部件时,它基于根而不是我认为正在发生的内部框架。在代码中,我制作了一个灰色框来演示,我不明白为什么它位于蓝色框下方,而不在“登录”文本下的黄色框内。谢谢你的帮助
from tkinter import *
root = Tk()
root.title("sighn in test")
#colors
background = "#273E47"
accent = "#d8973c"
red = "#bb4430"
white = "#edf2f4"
#this creates and places the background frame
main_buttons_frame = Frame(root, height = 500, width = 400, bg = background).grid(row = 0, column = 0)
#this creates and places the inner frame
inner_frame = Frame(main_buttons_frame, height = 450, width = 300, bg = accent).grid(row = 0, column = 0)
#this creates and places the "sighn in text"
top_text = Label(inner_frame, text = "sign in", font = ("helvitica", 30, "bold"), bg = accent, fg =
background).grid(row = 0, column = 0)
#this is a test to demonstrate
test_frame = Frame(inner_frame, bg = "grey", height = 100, width = 100).grid(row = 1, column = 0)
root.mainloop()
你有一个非常常见的初学者错误
它将
None
赋值给inner_frame
,因为grid()
/pack()
/place()
给出了None
所以后面的
Frame(inner_frame, ..)
意味着Frame(None, ..)
,它增加了root
你必须分两步来做
现在您已经将
Frame
分配给了inner_frame
编辑:
通过正确分配的小部件,我可以
现在灰色框位于黄色框架内,但图像显示了不同的问题-
grid()
/pack()
自动计算位置和大小,外部框架自动更改大小以适合孩子的大小使用
.grid_propagate(False)
可以停止它但它显示了其他问题-单元格没有使用父单元格的完整大小,所以黄色框架被移动到左上角,而不是居中:)空单元格有
width = 0
和heigh = 0
,所以将所有单元格移动到下一行和下一列不会改变它-它仍然在左上角:)您需要将
weight
分配给决定如何使用可用空间的列和/或行。所有列/行都有weight=0
,当您设置weight=1
时,该行和/或列将使用所有可用空间-(这需要更好的解释)-然后单元格内的元素将居中顺便说一句:PEP 8 Style Guide for Python Code
相关问题 更多 >
编程相关推荐