gpt4 book ai didi

Python Tkinter 按钮相距很远

转载 作者:行者123 更新时间:2023-12-01 04:26:37 25 4
gpt4 key购买 nike

我一直在学习一些Python,并且已经开始开发一个应用程序,该应用程序将允许用户使用 Tkinter 窗口中的 GUI 和 Canvas、使用 Tkinter 按钮和字段来制作一些艺术作品。 buttons are very far apart

但是,由于某种原因,所有这些按钮都相距很远,我不太确定它们的确切位置是通过什么逻辑确定的。这是我的代码,用于设置窗口和按钮:

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 分成两半。一半有 Canvas ,没有其他东西,另一半有一堆按钮。对我来说,自然的组织是从创建一个框架来包含按钮开始。然后,使用 pack 将 Canvas 放在左侧,框架放在右侧。

完成此操作后,您就可以组织按钮,而不必担心按钮网格和 Canvas 之间的交互。

其次,将对 grid 的所有调用放在一起,以便您可以更轻松地同时可视化所有内容。

它看起来像下面这样。请注意,所有按钮都使用 control 作为其父级。此外,条目小部件使用sticky选项来填充它们所分配的空间。如果您希望按钮的尺寸统一,则可以对按钮执行相同的操作。您还可以使用 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)

关于Python Tkinter 按钮相距很远,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33039018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com