我正在尝试使用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()
结果是:
我希望选项菜单o1
位于l1
的右侧。
如果我对pack命令[l1.pack()
和o1.pack()
]发表评论,那么该程序根本不会显示任何GUI。
答案 0 :(得分:1)
在您致电grid
之后,几行之后您拨打pack
,取消使用网格。为每个小部件使用一个或另一个但不是两个。 Sinc pack
默认为side='top'
,您的小部件会叠加在一起。
如果您将这些两个调用注释到pack
,则您没有看到任何内容的原因是因为您仍在调用b4.pack()
,并且您无法同时使用pack
和grid
用于具有相同父级的不同小部件。
此外,对rowconfigure
和columnconfigure
的调用需要在父窗口小部件上。在标签小部件上调用它们只会影响您放在标签内的小部件(这是可能的,但不常见)
答案 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')