Как изменить значение всех объектов в классе?
В первый раз тут задаю вопрос... Совсем недавно начал пробовать работать с классами, но у меня возникают проблемы с пониманием их работы.
Что я хотел сделать? Создание n-го количества кнопок в виде объектов класса. После этого я захотел сделать перемещение всех кнопок по команде вниз/вверх. Но передвигается только последняя созданная кнопка. Что я делаю не так?
from tkinter import ttk
from tkinter import *
import tkinter
class new(object):
def __init__(self, plant, date):
self.plant = plant
self.date = date
def delit(self):
print(self.date)
def up(self):
self.date = int(self.date) - 10
self.butt.place(x='10',y=self.date)
def down(self):
self.date = int(self.date) + 10
self.butt.place(x='10',y=self.date)
def state(self):
self.butt = Button(windows, text = self.date, command = self.delit)
self.butt.place(x='10',y=self.date)
windows = Tk()
windows.geometry('600x600')
L = ['50','100','150','200','250']
for n in L:
Butto = new(n,n)
Butto.state()
Up = Button(windows, text = "Вверх", command = Butto.up)
Up.place(x='100',y='10')
Down = Button(windows, text = "Вниз", command = Butto.down)
Down.place(x='100',y='40')
wind_run.mainloop()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Вы создаете экземпляры класса в цикле, перетирая их.
Т.е. в итоге по выходу из цикла у вас остается ОДИН объект butto,
который вы и перемещаете.
Создайте список объектов и прокручивайте их в цикле Вверх или Вниз.
from tkinter import ttk
from tkinter import *
import tkinter
class New(object):
def __init__(self, plant, date):
super().__init__()
self.plant = plant
self.date = date
self.state() # +++
def delit(self):
print(self.date)
def up(self):
self.date = int(self.date) - 10
self.butt.place(x='10', y=self.date)
def down(self):
self.date = int(self.date) + 10
self.butt.place(x='10', y=self.date)
def state(self):
self.butt = Button(windows, text = self.date, command = self.delit)
self.butt.place(x='10',y=self.date)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
def clickButtonUp(list_butto, up_down):
for btn in list_butto:
if up_down == 'up':
btn.up()
elif up_down == 'down':
btn.down()
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
windows = Tk()
windows.geometry('600x600')
L = ['50', '100', '150', '200', '250']
list_butto = [] # +++
for n in L:
butto = New(n, n)
# butto.state()
list_butto.append(butto) # +++
#Up = Button(windows, text="Вверх", command=butto.up)
Up = Button(windows, text="Вверх", command=lambda: clickButtonUp(list_butto, 'up'))
Up.place(x='100', y='10')
#Down = Button(windows, text = "Вниз", command = butto.down)
Down = Button(windows, text="Вниз", command=lambda: clickButtonUp(list_butto, 'down'))
Down.place(x='100', y='40')
windows.mainloop()
