Python Tkinter按钮相距很远
我一直在学习一些python,并开始开发一个应用程序,它允许用户在Tkinter窗口中使用GUI和画布,使用Tkinter按钮和字段制作一些艺术作品 然而,由于某些原因,所有这些按钮都相距很远,我不太确定它们的确切位置是由什么逻辑决定的。这是我的代码,用于设置窗口和按钮:Python Tkinter按钮相距很远,python,user-interface,tkinter,Python,User Interface,Tkinter,我一直在学习一些python,并开始开发一个应用程序,它允许用户在Tkinter窗口中使用GUI和画布,使用Tkinter按钮和字段制作一些艺术作品 然而,由于某些原因,所有这些按钮都相距很远,我不太确定它们的确切位置是由什么逻辑决定的。这是我的代码,用于设置窗口和按钮: area = Canvas(self) area.grid(row = 1, column=0, columnspan=2, rowspan=28, padx=5, sticky = E+W+S+N) #columns sel
area = Canvas(self)
area.grid(row = 1, column=0, columnspan=2, rowspan=28, padx=5, sticky = E+W+S+N)
#columns
self.columnconfigure(1, weight=1)
self.columnconfigure(3, pad=7)
self.rowconfigure(3, weight=1)
self.rowconfigure(5, pad=7)
#Background Colour
colourL = Label(self, text="Background colour:")
colourL.grid(row=1, column=3)
colourbg = Entry(self)
colourbg.grid(row = 1, column=4)
#Turtle Colour
turtcL = Label(self, text="Turtle colour:")
turtcL.grid(row=2, column=3)
turtcol = Entry(self)
turtcol.grid(row = 2, column=4)
setCol=Button(self, text="Set colours",command=lambda: setColour(alex,turtcol.get(),area,colourbg.get()) )
setCol.grid(row=2, column=5)
#Fractal Button
fractalL = Label(self, text="Order of Fractal:")
fractalL.grid(row=5, column=4)
fractorder = Entry(self)
fractorder.grid(row = 6, column=4)
#Buttons
drawButton = Button(self, text="Draw", command=lambda: draw(100, turtles, 80))
drawButton.grid(row=3, column=3)
如果有人能告诉我为什么以及如何使按钮和字段更紧密,我将不胜感激。您的问题中没有足够的代码来确定发生了什么。我的猜测是,第3行被赋予的权重比其他行更大 但是,我建议您对如何创建GUI进行两个修改,而不是追踪bug 首先,不要试图将所有内容都放在一个网格中,而是将GUI一分为二。一半有画布,没有其他东西,另一半有一串按钮。对我来说,自然的组织是从创建包含按钮的框架开始。然后,使用
pack
将画布放在左侧,框架放在右侧
一旦这样做了,就可以组织按钮,而不必担心按钮网格和画布之间的交互
其次,将所有对grid
的调用放在一起,这样您就可以更轻松地一次可视化所有内容
它看起来像下面这样。请注意,所有按钮都使用控件
作为其父按钮。此外,条目小部件使用粘滞
选项来填充它们所获得的空间。如果希望所有按钮的大小都相同,则可以对其执行相同的操作。您还可以使用sticky
属性将标签向左或向右对齐,具体取决于您希望GUI的外观
...
# create the two sides:
area = Canvas(self)
controls = Frame(self)
area.pack(side="left", fill="both", expand=True)
controls.pack(side="right", fill="both", expand=False)
# create the buttons and labels
colourL = Label(controls, text="Background colour:")
colorbg = Entry(controls)
turtcL = Label(controls, text="Turtle colour:")
turtcol = Entry(controls)
setCol = Button(controls, text="Set colours",command=lambda:
fractalL = Label(controls, text="Order of Fractal:")
fractorder = Entry(controls)
drawButton = Button(controls, text="Draw", command=lambda: draw(100, turtles, 80))
# now, arrange them on the screen
colourL.grid(row=1, column=1)
colourbg.grid(row=1, column=2, sticky="ew"
turtcL.grid(row=2, column=1)
turtcol.grid(row=2, column=2, sticky="ew")
setCol.grid(row=2, column=3)
drawButton.grid(row=3, column=1)
fractalL.grid(row=5, column=2)
fractorder.grid(row=6, column=2, sticky="ew")
...
最后,当使用网格时
,您应该始终为至少一列和一行指定正“权重”。这告诉tkinter在将小部件放置到位后,在何处提供额外的空间
假设您希望所有按钮都位于顶部,则可以为第7行(窗口小部件最后一行之后的行)赋予正权重。此外,假设您希望包含条目的列尽可能宽,可以为第2列指定权重:
controls.grid_rowconfigure(7, weight=1)
controls.grid_columnconfigure(2, weight=1)
您是否在任何地方调用
grid\u row configure
或grid\u column configure
?将使用configure设置编辑op,我意识到这就是问题所在-配置是如何工作的?