Как сложить значения в checkbox?
Вопрос в том, как в def count разумно посчитать сумму в чекбоксах? Вариант, как у меня через if кажется долгим и неразумным.
Мой код:
import tkinter
import tkinter.messagebox
class MyGUI:
def __init__(self):
self.root = tkinter.Tk()
self.root.title("Подсчет работ")
# делаем рамки
self.frame_1 = tkinter.Frame(self.root)
self.frame_2 = tkinter.Frame(self.root)
self.frame_3 = tkinter.Frame(self.root)
self.frame_4 = tkinter.Frame(self.root)
self.frame_5 = tkinter.Frame(self.root)
self.frame_6 = tkinter.Frame(self.root)
self.frame_7 = tkinter.Frame(self.root)
self.frame_8 = tkinter.Frame(self.root)
#закрываем рамки
# задаем чек боксы?
self.cb_var1 = tkinter.IntVar()
self.cb_var2 = tkinter.IntVar()
self.cb_var3 = tkinter.IntVar()
self.cb_var4 = tkinter.IntVar()
self.cb_var5 = tkinter.IntVar()
self.cb_var6 = tkinter.IntVar()
self.cb_var7 = tkinter.IntVar()
# выбираем позицию чекбокса
self.cb_var1.set(0)
self.cb_var2.set(0)
self.cb_var3.set(0)
self.cb_var4.set(0)
self.cb_var5.set(0)
self.cb_var6.set(0)
self.cb_var7.set(0)
# первая рамка
self.cb1 = tkinter.Checkbutton(self.frame_1,
text="Замена масла - 500 ",
variable=self.cb_var1)
self.cb1.pack(side="left")
# вторая рамка
self.cb2= tkinter.Checkbutton(self.frame_2,
text="Смазочные работы - 300",
variable=self.cb_var2)
self.cb2.pack(side="left")
# третья рамка
self.cb3 = tkinter.Checkbutton(self.frame_3,
text="Промывка радиатора - 700",
variable=self.cb_var3)
self.cb3.pack(side="left")
#четвертая рамка
self.cb4 = tkinter.Checkbutton(self.frame_4,
text="Замена жидкости в трансмисии = 1000",
variable=self.cb_var4)
self.cb4.pack(side="left")
# пятая рамка
self.cb5 = tkinter.Checkbutton(self.frame_5,
text="Осмотр - 800",
variable=self.cb_var5)
self.cb5.pack(side="left")
# шестая рамка
self.cb6 = tkinter.Checkbutton(self.frame_6,
text="Замена глушителя выхлопа - 1300",
variable=self.cb_var6)
self.cb6.pack(side="left")
#седьмая рамка
self.cb7 = tkinter.Checkbutton(self.frame_7,
text="Перестановка шин - 1300",
variable=self.cb_var7)
self.cb7.pack(side="left")
# 8 рамка с кнопками
self.button_value = tkinter.Button(self.frame_8,
text="Показать сумму",
command=self.do_count)
self.button_quit = tkinter.Button(self.frame_8,
text="Выйти",
command=self.root.quit)
self.button_value.pack(side="left")
self.button_quit.pack(side="left")
self.frame_1.pack()
self.frame_2.pack()
self.frame_3.pack()
self.frame_4.pack()
self.frame_5.pack()
self.frame_6.pack()
self.frame_7.pack()
self.frame_8.pack()
tkinter.mainloop()
def do_count(self):
self.message = "Ваши затраты:"
if self.cb_var1.get() == 1:
self.message = "Ваши затраты:" + "500 р"
elif self.cb_var2.get() == 1:
self.message = "Ваши затраты:" + "300 р"
elif self.cb_var3.get() == 1:
self.message = "Ваши затраты:" + "700 р"
elif self.cb_var4.get() == 1:
self.message = "Ваши затраты:" + "1000 р"
elif self.cb_var5.get() == 1:
self.message = "Ваши затраты:" + "800 р"
elif self.cb_var6.get() == 1:
self.message = "Ваши затраты:" + "1300 р"
elif self.cb_var7.get() == 1:
self.message ="Ваши затраты:" + "1300 р"
if self.cb_var1.get() and self.cb_var2.get() == 1:
self.message ="Ваши затраты:" + "800 р"
if self.cb_var1.get() and self.cb_var3.get() == 1:
self.message ="Ваши затраты:" + "1200 р"
if self.cb_var1.get() and self.cb_var4.get() == 1:
self.message ="Ваши затраты:" + "1500 р"
if self.cb_var1.get() and self.cb_var5.get() == 1:
self.message ="Ваши затраты:" + "1300 р"
if self.cb_var1.get() and self.cb_var6.get() == 1:
self.message ="Ваши затраты:" + "1800 р"
if self.cb_var1.get() and self.cb_var7.get() == 1:
self.message ="Ваши затраты:" + "1800 р"
if self.cb_var1.get() and self.cb_var2.get() and self.cb_var3.get() == 1:
self.message ="Ваши затраты:" + "1500 р"
tkinter.messagebox.showinfo("Общая Стоимость",self.message)
my_gui=MyGUI()
Ответы (2 шт):
Автор решения: Renat Shabanov
→ Ссылка
Добавил: self.message =0 , и вроде все сработало.
def do_count(self):
self.message = 0
if self.cb_var1.get() == 1:
self.message = self.message + 500
if self.cb_var2.get() == 1:
self.message =self.message + 300
if self.cb_var3.get() == 1:
self.message =self.message + 700
if self.cb_var4.get() == 1:
self.message =self.message + 1000
if self.cb_var5.get() == 1:
self.message =self.message + 800
if self.cb_var6.get() == 1:
self.message =self.message + 1300
if self.cb_var7.get() == 1:
self.message =self.message + 1300
self.message = self.message
tkinter.messagebox.showinfo("Выбор", self.message)
Автор решения: Павел
→ Ссылка
Думаю так будет удобнее.
def do_count(self):
self.message = 0
fields = {self.cb_var1 : 500,
self.cb_var2 : 300,
self.cb_var3 : 700,
self.cb_var4 : 1000,
self.cb_var5 : 800,
self.cb_var6 : 1300,
self.cb_var7 : 1300}
for field, cost in fields.items():
if field.get() == 1:
self.message += cost
tkinter.messagebox.showinfo("Выбор", self.message)