我可以创建一个下拉菜单,但我希望它位于python主程序的GUI中

我可以创建一个下拉菜单,但我希望它位于python主程序的GUI中,python,user-interface,drop-down-menu,tkinter,Python,User Interface,Drop Down Menu,Tkinter,所以我现在有我的主程序可以正常工作,但是我希望在GUI中显示一个下拉菜单。当我尝试一些编码时,当我希望新的下拉菜单出现在某个文本旁边时,它会使它出现在一个新窗口中。是否可以将下拉菜单嵌入GUI 这是我用来创建菜单的代码: def f2createmenu(): master = Tk() variable = StringVar(master) variable.set("one") # default value w = OptionMenu(master

所以我现在有我的主程序可以正常工作,但是我希望在GUI中显示一个下拉菜单。当我尝试一些编码时,当我希望新的下拉菜单出现在某个文本旁边时,它会使它出现在一个新窗口中。是否可以将下拉菜单嵌入GUI

这是我用来创建菜单的代码:

def f2createmenu():

    master = Tk()

    variable = StringVar(master)
    variable.set("one") # default value

    w = OptionMenu(master, variable, "one", "two", "three")
    w.pack()

    mainloop()
在GUI中,我有两个框架。这是从第二个框架中获取的,正如您所看到的,我已经调用了子例程,我只是不确定如何将它嵌入到GUI中,而不是作为一个单独的窗口

#Frame 2 (Query) Heading Buttons
labelspare=Label(f2, text =" ").grid(column=1, row=1, sticky=(W, E))
f2button1=Button(f2,  text="Order",command = CurrentOrders).grid(column=2, row=2, sticky=(W,E), ipadx = 20, ipady = 10, padx = 5, pady = 5)
f2button2=Button(f2,  text="Customer",command = CurrentOrders).grid(column=3, row=2, sticky=(W, E), ipadx = 20, ipady = 10, padx = 5, pady = 5)
f2button3=Button(f2,  text="Products",command = CustomerDetails).grid(column=4, row=2, sticky=(W, E), ipadx = 20, ipady = 10, padx = 5, pady = 5)
f2labelspare=Label(f1, text =" ").grid(column=1, row=3, sticky=(W, E))
f2labelspare=Label(f1, text =" ").grid(column=1, row=4, sticky=(W, E))
text2=Text(f2, width = 125, height = 42, wrap = WORD)


f2entryone=Entry(f2, textvariable=queryby).grid(column=3, row=3, sticky=(W, E))


f2labelt1=Label(f2, text="I would like to query ").grid(column=2, row=3, sticky=(W, E))
f2labelt2=Label(f2, text="    from ").grid(column=4, row=3, sticky=(W, E))
f2createmenu() #This is where the subroutine is called from.

如下图所示,当我真的希望它出现在“发件人”文本旁边时,它确实会出现在新窗口中

您没有显示所有代码,但显然您做错了什么。tkinter应用程序必须只有一个根窗口。由于您在调用此函数之前创建小部件,因此您要么创建了一个根窗口,要么在调用此函数之前隐式创建了一个根窗口

此函数用于创建第二个根窗口。如果不需要第二个根窗口,请不要创建
Tk()
的实例,也不要调用
mainloop

看起来简单的解决方法是进入您希望选项菜单出现的窗口:

def f2createmenu(master):

    variable = StringVar(master)
    variable.set("one") # default value

    w = OptionMenu(master, variable, "one", "two", "three")
    w.pack()
你可以这样称呼它:

f2createmenu(f2)

好吧,把OptionMenu放到你想要的框中。您将OptionMenu放入“master”,这是一个新窗口,而不是“f2”。顺便说一下,我看到了对Tk()和mainloop()的调用。请注意,在整个应用程序中,通常每个菜单只有一个。这是在同一个窗口中创建菜单还是作为单独的窗口创建菜单?OptionMenu的第一个参数是“parent”。菜单是在您指定的元素中创建的。正确,谢谢!我所需要做的就是把上面写着“parent”的地方改成“f2”,因为这是我想要的框架。非常感谢大家!