Вывести атрибут экземпляра класса, в зависимости от выбора в Combobox
Как вывести значение атрибута экземпляра класса в зависимости от выбора экземпляра в интерфейсе программы?
from tkinter import *
from tkinter import ttk
tk = Tk()
spisok = ttk.Combobox(tk, values=(["Right", "Left"]))
spisok.current(0)
znachenie1 = Label(tk, text='<>')
def go(self):
class Bet:
def __init__(self, name, variant):
self.name = name
self.variant = variant
Right = Bet("Right", variant="1")
Left = Bet("Left", variant="2")
znachenie1.config(text="variant в зависимости от выбора экземпляра из spisok")
spisok.grid(row=1, column=0)
znachenie1.grid(row=2, column=0)
btn1 = Button(text="Расчет")
btn1.bind("<Button-1>", go)
btn1.grid(row=4, column=2)
tk.mainloop()
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
как вариант вы можете создать список виджетов:
from tkinter import *
from tkinter import ttk
tk = Tk()
spisok = ttk.Combobox(tk, values=(["Right", "Left"]))
spisok.current(0)
znachenie1 = Label(tk, text='<>')
def go(self):
class Bet:
def __init__(self, name, variant):
self.name = name
self.variant = variant
Right = Bet("Right", variant="1")
Left = Bet("Left", variant="2")
_list = [Right, Left] # +++
#print(spisok.current())
# znachenie1.config(text="variant в зависимости от выбора экземпляра из spisok")
text = f'{_list[spisok.current()].name}: {_list[spisok.current()].variant}' # +++
znachenie1.config(text=text)
spisok.grid(row=1, column=0)
znachenie1.grid(row=2, column=0)
btn1 = Button(text="Расчет")
btn1.bind("<Button-1>", go)
btn1.grid(row=4, column=2)
tk.mainloop()
Автор решения: insolor
→ Ссылка
Можно сделать свой комбобокс, чтобы он хранил сами объекты, а не только их строковое представление, и метод .get() возвращал сам выбранный объект:
from tkinter import *
from tkinter import ttk
tk = Tk()
class MyCombo(ttk.Combobox):
def __init__(self, *args, values=None, **kwargs):
super().__init__(*args, values=values, **kwargs)
if values is None:
values = []
self._values = values
def get(self):
if self.current() == -1: # Если ничего не выбрано
return None
else:
return self._values[self.current()]
class Bet:
def __init__(self, name, variant):
self.name = name
self.variant = variant
def __str__(self):
# Определяем метод __str__ чтобы задать,
# как объект будет отображаться внутри комбо
return self.name
Right = Bet("Right", variant="1")
Left = Bet("Left", variant="2")
spisok = MyCombo(tk, values=[Right, Left])
spisok.current(0)
znachenie1 = Label(tk, text='<>')
def go():
value = spisok.get() # Получаем выбранный объект из комбо
znachenie1.config(text=f"{value.name}: {value.variant}")
# Или znachenie1.config(text=value.variant)
# если нужно вывести просто значение поля variant выбранного объекта
spisok.grid(row=1, column=0)
znachenie1.grid(row=2, column=0)
btn1 = Button(text="Расчет", command=go)
btn1.grid(row=4, column=2)
tk.mainloop()
