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