Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter按钮相距很远_Python_User Interface_Tkinter - Fatal编程技术网

Python 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

我一直在学习一些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
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,我意识到这就是问题所在-配置是如何工作的?