我在“根”窗口中使用了网格管理器,我想在“顶层”窗口中使用包管理器。但显示错误

时间:2018-07-24 11:49:14

标签: python-3.x tkinter

def createmat_window():
    mat = Toplevel(cal)
    frame1 = Frame(mat,bg='red',width=100,height=100).pack()
    choices = {'1', '2', '3', '4', '5'}
    pop = OptionMenu(frame1, opt1,*choices)
    pop.pack()
    opt1.set('1')



cal = Tk()                              # (ROOT_WINDOW )
cal.title("calculator")

opt1 = StringVar()
Matrix = Button(cal, padx=16, bd=8, fg="black", font=('arial', 15, 'bold'),
                    text="MAT", bg="honeydew3", command=createmat_window)
Matrix.grid(row=5, column=10)

这给我错误_tkinter.TclError:无法使用里面的几何管理器包。已经有奴隶由网格管理

但是我已经读到我们可以在不同的窗口中使用不同的几何图形管理器,而不管其他窗口正在使用什么。

1 个答案:

答案 0 :(得分:2)

因为你这样做

frame1 = Frame(mat,bg='red',width=100,height=100).pack()

frame1分配了pack()返回的值None。 (另请参见this answer)。

现在,当您使用frame1作为OptionMenu的主菜单时,基本上就变成了

pop = OptionMenu(None, opt1,*choices)

这将OptionMenu的主菜单设置为默认主窗口,在本例中为cal,该主窗口已经添加了grid()小部件。

将框架的创建更改为

时,您应该会很好
frame1 = Frame(mat,bg='red',width=100,height=100)
frame1.pack()