Python 使用列表填充tkinter选项菜单

Python 使用列表填充tkinter选项菜单,python,tkinter,Python,Tkinter,我有一个列表,我想用它来填充tkinter中的选项菜单。 我已经到处找了,找不到一个有效的解决方案。。。感谢您的帮助 from tkinter import * from tkinter.ttk import * from tkinter import messagebox import tkinter as tk from tkinter import ttk class TestGUI(Frame): def __init__(self, root): Fram

我有一个列表,我想用它来填充tkinter中的选项菜单。 我已经到处找了,找不到一个有效的解决方案。。。感谢您的帮助

from tkinter import *
from tkinter.ttk import *
from tkinter import messagebox
import tkinter as tk
from tkinter import ttk


class TestGUI(Frame):

    def __init__(self, root):
        Frame.__init__(self, root)
        self.root = root
        self.pack()
        self.mylist = ['test','test2','test3']
        self.emailDropDown= OptionMenu(root,self.mylist)
        self.emailDropDown.pack()

root = Tk()
gui = TestGUI(root)
root.mainloop()

OptionMenu的第一个参数不是parent和options list,而是parent、variable和options list

因此,如果要按位置而不是按名称传递参数,则需要将选项列表作为第三个参数传递,而不是第二个参数

有关示例,请参见

from tkinter import *
from tkinter.ttk import *
from tkinter import messagebox
import tkinter as ttk
from tkinter import ttk
import tkinter.ttk as ttk


class TestGUI(Frame):

    def __init__(self, root):
        Frame.__init__(self, root)
        self.root = root
        self.pack()

        self.mylist = ['test','test2','test3']
        variable = StringVar()
        variable.set(self.mylist[0]) # default value
        self.w = OptionMenu(*(root, variable) + tuple(self.mylist))
        self.w.pack()



root = Tk()
gui = TestGUI(root)
root.mainloop() 

但是,当您选择第一个列表选项时,它将消失。。仍在试图找到答案

选项菜单的每个示例都说明了如何做到这一点。你只是把论点传错了。如果您想通过位置而不是名称传递它们,那么选项列表将排在第三位,而不是第二位。不要同时使用*和tk/ttk导入tkinter和ttk。建议的导入方法是使用import tkinter作为ttk,并将tkinter.ttk作为ttk。您应该删除使用*@mike SMT的其他导入谢谢您的评论,我按照您的指示做了,现在收到一个错误,上面显示NameError:name'Frame'未定义@MattG31,这是因为您需要添加tk。作为添加小部件时的后缀。示例:每个小部件的tk.Frame、tk.Entry、tk.Button等。我们这样做的原因是保持名称空间更干净,并防止意外重写导入的方法。