Tkinkter Grid()对齐不如预期:Python 2.7

时间:2015-08-20 14:29:28

标签: python python-2.7 user-interface tkinter

我正在尝试使用grid()函数并排对齐标签和选项菜单。这是我用来创建简单GUI的代码:

    from Tkinter import *
    win1 = Tk()
    win1.title("Chumma")

    #Option selection frame:
    f3 = Frame(win1)
    f3.grid(column=0,row=0)
    f3.pack() 
    l1 = Label(f3, text="Select the function which you want to perform: ", bg = "yellow")
    moduleList = StringVar(f3)
    moduleList.set("Normal Walk") #to display the default module name
    o1 = OptionMenu(f3, moduleList, "Normal Walk", "Brisk Walk", "Running", "Custom")
    b3 = Button(f3, text="Execute the option", fg="blue")
    b4 = Button(f3, text="Stop", fg="red")

    #Packing the stuffs in required order:
    l1.grid(row=0, column=0, sticky=W) #E means east
    l1.grid_rowconfigure(0, weight=1)
    l1.grid_columnconfigure(0, weight=1)
    l1.pack(fill = X, padx = 5)
    o1.grid(row=0,column=1)
    o1.grid_rowconfigure(0, weight=1)
    o1.grid_columnconfigure(1, weight=1)
    o1.pack()
    b4.pack()

    win1.mainloop()

结果是:

GUI Window:

我希望选项菜单o1位于l1的右侧。 如果我对pack命令[l1.pack()o1.pack()]发表评论,那么该程序根本不会显示任何GUI。

2 个答案:

答案 0 :(得分:1)

在您致电grid之后,几行之后您拨打pack,取消使用网格。为每个小部件使用一个或另一个但不是两个。 Sinc pack默认为side='top',您的小部件会叠加在一起。

如果您将这些两个调用注释到pack,则您没有看到任何内容的原因是因为您仍在调用b4.pack(),并且您无法同时使用packgrid用于具有相同父级的不同小部件。

此外,对rowconfigurecolumnconfigure的调用需要在父窗口小部件上。在标签小部件上调用它们只会影响您放在标签内的小部件(这是可能的,但不常见)

答案 1 :(得分:0)

我认为Tkinter不允许在一个框架中混合包装方案(网格,包装,地点)。以下是如何组织三个小部件的示例。

from Tkinter import *
root = Tk()

label = Label(root, text='blablabla')
someotherwidget = Entry(root)
button = Button(root, command=lambda: None, text='Boom')

label.grid(row=0, column=0)
someotherwidget.grid(row=0, column=1)
button.grid(row=1, column=0, columnspan=2)

root.mainloop()

选项'columspan'就像您想要加入多少列来放置小部件。我们这里有2列,所以如果我们想要看到不在标签下方的按钮,但在标签和someotherwidget的下方,我们必须指定'columnspan'选项(显然,行的模拟是'rowspan')