使用Tkinter的Python GUI - 小部件定位不合适

时间:2014-11-03 16:04:09

标签: python user-interface tkinter widget geometry

我正在创建一个GUI,其中我有一个TextBox和一些Button

问题是,布局似乎是混乱的。当我增加行数以便我可以很好地分开时,它并没有任何区别。我不确定我在哪里弄错了。

代码:

from Tkinter import *
from tkFileDialog import *

gui = Tk()  #create an object
gui.title("xyz")
gui.geometry("900x300")

GuiLabel1 = Label(gui,text="hi everyone!!!!!!")
GuiLabel1.grid(row=0, column=0)
GuiLabel2 = Label(gui,text="File")
GuiLabel2.grid(row=1, column=0)


bar=Entry(gui)
bar.grid(row=1, column=1)



button1= Button(gui, text="Browse")
button1.grid(row=1, column=2)
button2= Button(gui, text="Process")
button2.grid(row=2, column=2)

button3= Button(gui, text="ABC")
button3.grid(row=3, column=0)

button4= Button(gui, text="ABC")
button4.grid(row=3, column=1)

button5= Button(gui, text="ABC")
button5.grid(row=3, column=2)

button6= Button(gui, text="ABC")
button6.grid(row=3, column=3)

button7= Button(gui, text="ABC")
button7.grid(row=3, column=4)


gui.mainloop()

有关GUI的屏幕截图,请参见下图:

screenshot of the GUI

3 个答案:

答案 0 :(得分:1)

小部件的出现几乎与您告诉他们出现的完全一样。问题是,你依赖很多默认的定位,这可能就是为什么它们不会以你认为的方式出现在屏幕上。

当您使用网格时,您应该几乎总是包含sticky选项来定义窗口小部件将如何填充它所放置的单元格。您经常需要使用填充来扩充它。最后,您通常应该给至少一行和一列非零权重。

另外,请记住您正在创建网格。如果网格中有非常宽的项目,则会导致整个列变宽。如果在后续行中放置较小的项目,则默认情况下它们将在该列中居中。

答案 1 :(得分:0)

您可以使用" width ="用于均匀空间窗口小部件的参数,请参阅http://effbot.org/tkinterbook/button.htm和行/列配置以显示空行/列

from Tkinter import *

gui = Tk()  #create an object
gui.title("xyz")
gui.geometry("900x300")

GuiLabel1 = Label(gui,text="hi everyone!!!!!!")
GuiLabel1.grid(row=0, column=0)

GuiLabel2 = Label(gui,text="File")
GuiLabel2.grid(row=3, column=0)

bar=Entry(gui)
bar.grid(row=1, column=1)

button1= Button(gui, text="Browse", width=test_width)
button1.grid(row=1, column=2)
button2= Button(gui, text="Process", width=test_width)
button2.grid(row=2, column=2)

test_width=20
for ctr in range(4):
    button= Button(gui, text="ABC"+str(ctr+1), width=test_width)
    button.grid(row=3, column=ctr)

## empty column between
gui.columnconfigure(4, minsize=50)
button7= Button(gui, text="ABC")
button7.grid(row=3, column=5)

gui.mainloop()

答案 2 :(得分:-3)

我认为你可能正在寻找

的混合物
pack()
grid()

以及元素Frame,它允许您将其中的元素“分组”为一个元素。

我无法修复你的代码,但我建议你研究一下并尝试一下。