@vakhitov_univers

Класс помещен в список, как обратиться к атрибуту внутри класса?

Моя задача:
сделать так, что бы в один момент всего 1 кнопка была заблокирована
то есть нажимаю кнопку 1 - она блокируется, нажимаю 2 - она блокируется, 1 разблокируется
import tkinter
from tkinter import *
from tkinter import ttk
from urllib import request
import json
from tkinter import messagebox

root = Tk()
root.geometry('900x600+1000+300')

f_frame = LabelFrame(root, text="У меня есть")
f_frame.place(y=20, x=20)

r_frame = LabelFrame(root, text="Хочу приобрести")
r_frame.place(y=20, x=550)

buttons = {
    "master": "f_frame",
    "fg": "#fff",
    "padx": 20,
    "pady": 12,
    "width": 7,
    "height": 2,
}

btn_ass ={ "RUB": "active",
            "USD": "active",
            "EUR": "active",}


class MyButtons():


    def __init__(self, nomination, state):
        self.fg = buttons['fg']
        self.text = nomination
        self.padx = buttons['padx']
        self.pady = buttons["pady"]
        self.width = buttons["width"]
        self.height = buttons["height"]
        self.state = state
        self.right_btns = Button(f_frame, text=self.text, padx=self.padx, pady=self.pady, width=self.width, #Правый массив кнопок
                                 height=self.height, command=self.change_state_right, state=self.state) # Левый массив кнопок
        self.left_btns = Button(r_frame, text=self.text, padx=self.padx, pady=self.pady, width=self.width,
                                height=self.height, command=self.change_state_left, state=self.state)
        self.right_btns.pack(side=LEFT)
        self.left_btns.pack(side=RIGHT)


    def change_state_right(self):
        if self.right_btns['state'] == tkinter.NORMAL:
            self.right_btns['state'] = tkinter.DISABLED

    def change_state_left(self):
        if self.left_btns['state'] == tkinter.NORMAL:
            self.left_btns['state'] = tkinter.DISABLED


for nomination, state in btn_ass.items():
    items = [] # Пустой список
    x = MyButtons(nomination, state)
    items.insert(0,x) # добавляю в список
    print(items)



root.mainloop()

мне нужно менять атрибут state виджета Button
при использовании print(MyButton(nomination, state) получаю:
[<__main__.MyButtons object at 0x000001EB50412B60>]
[<__main__.MyButtons object at 0x000001EB50412BF0>]
[<__main__.MyButtons object at 0x000001EB50413040>]
как тут обратиться к свойству state виджета Button?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Предположим, у вас есть список экземпляров вашего класса, который получен так:
items = [] # Пустой список
for nomination, state in btn_ass.items():
    items.insert(0,MyButtons(nomination, state)) # добавляю в список


тогда обратиться к полю state первого экземпляра из списка можно так:
print(items[0].state)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы