我使用python 3、tkinter和mysql连接器。
我想用我的sql数据创建一个optionMenu对象,我试图这样做:

     mongroupe3 = LabelFrame(app, text='nouvelle div 3').pack()
     Label(mongroupe3, text='groupe3').pack()
     select_Classes = ("select id,nom from classe")
     cursor.execute(select_Classes)
     result = cursor.fetchall()
     for row in result:
        id = row[0]
        nom = row[1]
        mongroupe3 = Label(app, text=nom).pack()
        v = StringVar()
        v.set(nom)
        om = OptionMenu(mongroupe3, v, nom)
        om.pack()

代码必须显示一个下拉菜单,其中包含我的“classe”表上的“nom”列表,但我的选项菜单在for循环中,执行的次数与我的classe表中的记录数相同。
例如,如果我有3条记录,我得到3个不同值的选项菜单。
o试图将我的optionMenu从for循环中去掉,就像这样:
     mongroupe3 = LabelFrame(app, text='nouvelle div 3').pack()
     Label(mongroupe3, text='groupe3').pack()
     select_Classes = ("select id,nom from classe")
     cursor.execute(select_Classes)
     result = cursor.fetchall()
     for row in result:
        id = row[0]
        nom = row[1]
        mongroupe3 = Label(app, text=nom).pack()
        v = StringVar()
        v.set(nom)
     om = OptionMenu(mongroupe3, v, nom)
     om.pack()

但我只拿到我放在桌上的最后一张唱片。
我无法将for循环放入OptionMenu中,原因如下shemaOptionMenu(parent, default variable, var)

最佳答案

因为这个原因你得到了你意想不到的东西:
只创建一个标签,并在每次迭代中重写它(类变量v也是如此)。所以到最后,逻辑上你只能得到一行(因为,同样,你只有一个label小部件)。
除此之外,您还必须关心小部件及其放置位置:例如,我认为mongroup3必须是要创建的行的父小部件,这与您所做的不同。

10-07 12:09