Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 17.04.2020
Сообщений: 15

Как обратиться к определённому виджету класса созданного циклом?

17.04.2020, 10:53. Показов 2142. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане!!! Изучая Tkinter наткнулся на следующую проблему:
Необходимо извлечь данные переменных IntVar() чекбоксов всех виджетов класса созданных циклом.
Код программы:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from tkinter import *
 
class Checkbut():
 
    '''Создание класса флажков'''
 
    def __init__(self, text, val, row, column):
 
        '''Создание объекта класса'''
 
        self.vibor = IntVar()
        self.name = Checkbutton(root2,text = text, onvalue = val,
                    variable = self.vibor,command = lambda: self.changeweek(self.vibor))
        self.name.grid(row = row, column = column)
        '''Создание поля лейбл под чекбоксом'''
        self.lbl = Label(root2, textvariable = self.vibor)
        self.lbl.grid(row = row + 1, column = column)
 
    def changeweek (self, val):
 
        '''Обработка нажатия на флажок'''
 
        print('Нажат флажок № ' + str(val.get()))
        print(self.name)
 
#-------------------------ДЕФЫ------------------------------------------------#
 
def butselect(event):
 
    '''Обработка нажатия кнопки'''
 
    print(spis.name)
 
root2 = Tk()
root2.title('Выбор дня недели выходного дня')
week = ['Понедельник','Вторник','Среда','Четверг','Пятница','Суббота','Воскресенье']
for z in range(7):
    spis = Checkbut(week[z], z+1, 0, z)
but = Button(root2, text = 'Proverka')
but.grid(row = 3, column = 3)
but.bind('<Button-1>', butselect)
 
root2.mainloop()


Все чекбоксы хранятся в переменной spis, обращаясь к ней через spis.name получаю .!checkbutton7. Извлечь IntVar() из .!checkbutton7 через get() не получается, обратиться к другому .!checkbutton не могу.
Пробовал генерировать чекбоксы словарём (в цикле каждый чекбокс хранился в spisok[z]) - тогда я могу обратиться к нужному мне чекбоксу (напр. spis[3]), но извлечь так мне нужное значение IntVar() не получилось и командой spis[3]['variable'].get()

Обойти данную проблему я решил с помощью лямбды по нажатию на чекбокс (def changeweek()), но мысли об упомянутом выше не покидают мою голову. Заранее спасибо!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2020, 10:53
Ответы с готовыми решениями:

Как обратиться к textbox из созданного класса
В общем вопрос, как обратиться к textbox с созданного класса, то есть у меня есть какой-то class.cs , в него передаются некоторые...

Как обратиться к определенному объекту из класса?
Есть класс, который использует параметры базового класса и имеет 1 собственный. Как обратиться к определенному параметру этого класса и...

Tkinter - теперь как обратиться к виджету зная его имя?
я немного чайник ... сам вопрос: если я хочу обратиться к виджету, зная его имя, вроди бы как надо использовать nametowidget(name), но я...

2
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
17.04.2020, 21:37
Лучший ответ Сообщение было отмечено Nitromag как решение

Решение

Цитата Сообщение от Nitromag Посмотреть сообщение
Все чекбоксы хранятся в переменной spis
Нет, spis каждый раз перезаписывается и в нем хранится только последний чекбокс

Вроде так

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from tkinter import *
 
class Checkbut():
 
    '''Создание класса флажков'''
 
    def __init__(self, text, val, row, column):
 
        '''Создание объекта класса'''
 
        self.vibor = IntVar()
        self.name = Checkbutton(root2,text = text, onvalue = val,
                    variable = self.vibor,command = self.changeweek)
        self.name.grid(row = row, column = column)
        '''Создание поля лейбл под чекбоксом'''
        self.lbl = Label(root2, textvariable = self.vibor)
        self.lbl.grid(row = row + 1, column = column)
 
    def changeweek (self):
 
        '''Обработка нажатия на флажок'''
 
        print('Нажат флажок № ' + str(self.vibor.get()))
        print(self.name)
 
#-------------------------ДЕФЫ------------------------------------------------#
 
def butselect(event):
 
    '''Обработка нажатия кнопки'''
    for b in spis:
        if b.vibor.get() > 0:
            print(b.name)
 
root2 = Tk()
root2.title('Выбор дня недели выходного дня')
week = ['Понедельник','Вторник','Среда','Четверг','Пятница','Суббота','Воскресенье']
spis = []
for z in range(7):
    spis.append(Checkbut(week[z], z+1, 0, z))
but = Button(root2, text = 'Proverka')
but.grid(row = 3, column = 3)
but.bind('<Button-1>', butselect)
 
root2.mainloop()
1
2 / 2 / 0
Регистрация: 17.04.2020
Сообщений: 15
17.04.2020, 21:53  [ТС]
tooru, Братан - спасибо огромное 2 дня мучаюсь!!! Самое интересное, что я пробовал запихнуть чекбоксы и в словарь, и в список но пытался достать переменную командой:
Python
1
print(spis[0]['variable'])
или
Python
1
print(spis[0][vibor.get()])
а оказывается нужно было вытягивать их циклом
Python
1
2
3
for b in spis:
        if b.vibor.get() != 0:
            print(b.vibor.get())
Пришлось временно писать
Python
1
2
    def info (self):
        return(self.vibor.get())
в теле класса
Ещё раз благодарю, что помог разобраться - я спать нормально не мог!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2020, 21:53
Помогаю со студенческими работами здесь

Обратиться к виджету по имени
нашёл в интернете что это делается как то так: QObject *find-&gt;findChild&lt;QObject*&gt;(&quot;Button&quot;); и сразу ошибка expected initializer before...

Как обратиться к функции динамически созданного компонента?
Динамически создаю кнопку: TButton *button = new TButton(this); button-&gt;Parent = this; button-&gt;Name =...

Как обратиться к определенному элементу в Imagelist?
Как можно обратиться к определенному элементу в Imagelist, когда их несколько? Что бы при нажатии высвечивалось сообщение massagebox? ...

Как в char обратиться к определенному символу?
Как в char обратиться к определенному символу, без множин.

Как мне обратиться к определенному узлу TreeView
Как мне обратьтися к определенному узлу.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru