Как использовать циклы for внутри виджета OptionMenu

У меня есть следующий optionMenu om = OptionMenu(mygroup3, v, name).pack() и циклы for:

for row in result: 
id = row[0]
name = row[1]

он делает следующий код:

from tkinter import *
from connectdb import *
app = Tk()
global mygroup3
mygroup3 = LabelFrame(app, text='new div').pack()
Label(mygroup3, text='group3').pack()
select_Class = ("select id,name from class")
cursor.execute(select_Class)
result = cursor.fetchall()
for row in result:
    id = row[0]
    nom = row[1]
    mygroup3 = Label(app, text=nom).pack()
    v = StringVar()
    v.set(nom)
    om = OptionMenu(mygroup3, v, nom)
    om.pack()

код создает столько optionMenu, чем мои записи таблицы, потому что мой виджет optionMenu находится в моем цикле for, но когда я помещаю свой OptionMenu за пределы, у меня есть только последние зарегистрированные записи. Итак, как я могу использовать OptionMenu, чтобы показать все мои записи?

Я бы посоветовал создать список или ссылки для каждой строки, щелкнув по которой вы можете запустить OptionMenu или просто сетку с entry или метки, содержащие все эти детали.

user2575725 30.04.2018 11:49

это возможно, однако я подумал создать список с флажком в соответствии со скоростью раскрывающегося списка, это может усложнить ситуацию и сделать процесс менее динамичным. Нельзя с выпадающим списком?

Calvin 30.04.2018 11:57

Хорошо раскрывающийся список также является хорошим выбором, показывая одно ключевое поле из строки, позже имеющее другие записи / метки, чтобы показать другие детали выбора элемента из раскрывающегося списка.

user2575725 30.04.2018 11:59

да, но я не могу этого сделать, потому что моему OptionMenu нужно показать весь результат цикла, и я могу видеть только последнюю запись, я пытался поставить OptionMenu до или после цикла, но ничего хорошего. Можно ли получить цикл for внутри объекта tkinter?

Calvin 30.04.2018 12:09

Попробуйте напечатать row на консоли и проверьте, все ли вы получаете нужные строки, а тем временем закомментируйте эти соответствующие строки для OptionMenu.

user2575725 30.04.2018 12:13

Я напечатал (имя) внутри своего цикла for, он работал и распечатал всю свою запись

Calvin 30.04.2018 12:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение, которое мне просто нужно, чтобы преобразовать результат цикла for в строку с mylist.append(str(row[1])) и усечь результат списка с помощью *mylist в OptionMenu

Другие вопросы по теме