Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 2, 2016 08:37:21

Santik
Зарегистрирован: 2016-07-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление новых переменных

Здравствуйте!
Для тренировки писал программку, суть в которой в том, что пользователь вводит изначально имеющуюся сумму, а также сумму, которую хочет затратить на ту или иную вещь и название вещи. Далее кликает по ‘Click me’ и ему выдается ответ, сколько же у него останется, либо же, если хочет добавить еще 1 пункт трат - кликает на ‘add’. Трудность возникла в следующем: Как включить ВСЕ добавленные кнопкой ‘Add’ переменные? Я понимаю, что каждый раз, когда я кликаю на эдд, переменная self.var ссылается на новое число, но вот как это исправить, я не знаю. Каким образом, я могу генерировать переменные и подставлять их формулу для вычисления итогового значения?
Т.е, если у нас изначально имеются 3 пункта покупок, я добавлю еще 3, и вычисляю траты на все 6?
Буду очень благодарен за любые советы, которые наведут на мысль, либо источник, где это можно прочесть (гуглил - не нашел).

 from tkinter import *

class Finance(Frame):
def __init__(self, master):
super(Finance, self).__init__(master)
self.u = 6
self.new_vars = 0
self.grid()
self.operation()

def added(self):
self.u +=1
self.var_text = Label(self, text='your potencial expenses').grid(row=self.u, column=0, sticky=W)
self.var = Entry(self)
self.var.grid(row=self.u,column=1, sticky=W)


self.your_buy_text = Label(self, text='what u want?').grid(row=self.u,column=2, sticky=W)
self.your_buy = Entry(self).grid(row=self.u,column=3, sticky=W)
self.new_vars += 1

def operation(self):

self.your_money_text = Label(self, text = 'Your money now').grid(row=0, column=0, sticky =W)
self.your_money = Entry(self)
self.your_money.grid(row=0, column=1, columnspan=2, sticky=W)

self.your_expenses2_text = Label(self, text = '1st expense').grid(row = 2, column =0, sticky =W)
self.your_expenses2 = Entry(self)
self.your_expenses2.grid(row =2, column=1, sticky=W)

self.your_buy_text = Label(self, text='what u want?').grid(row=2, column=2, sticky=W)
self.your_buy = Entry(self).grid(row=2, column=3)

self.your_expenses_text = Label(self, text='2nd expense').grid(row=4, column=0, sticky=W)
self.your_expenses = Entry(self)
self.your_expenses.grid(row=4, column = 1)

#experience
self.your_expenses_text = Label(self, text='3rd').grid(row=5, column=0, sticky=W)
self.your_expenses3 = Entry(self)
self.your_expenses3.grid(row=5, column = 1)

self.your_buy_text = Label(self, text='what u want?').grid(row=5, column=2, sticky=W)
self.your_buy = Entry(self).grid(row=5, column=3, sticky =W)
#end of exp

self.your_buy_text = Label(self, text='what u want?').grid(row=4, column=2, sticky=W)
self.your_buy = Entry(self).grid(row=4, column=3, sticky =W)

self.result = Text(self, width=25, height=5, wrap=WORD)
self.result.grid(row=1132, column=0, sticky=E)


self.but = Button(root, text='click me', command=self.math).grid(row=6, columnspan=4, sticky=W)
self.adding = Button(root, text='add', command=self.added)
self.adding.grid()


def math(self):
capital = self.your_money.get()
a = self.your_expenses2.get()
b = self.your_expenses.get()
g = self.your_expenses3.get()
# p = self.var.get()
if self.new_vars > 0:
print (self.var)
p = self.var.get()
c = int(a) + int(b) + int(g)+int(p)
else:
c = int(a) + int(b) + int(g)
d = int(capital) - int(c)



resultat = 'Сумма покупок: '
resultat += str(c) + '\n'
resultat += 'Ваш остаток, после всех покупок составит: '
resultat += str(d)


self.result.delete(0.0, END)
self.result.insert(0.0, resultat)

root = Tk()
root.title('Your finance manager')
root.geometry('500x500')
manager = Finance(root)
root.mainloop()

Офлайн

#2 Авг. 2, 2016 08:38:51

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Добавление новых переменных

Используйте список.

Офлайн

#3 Авг. 2, 2016 09:39:26

Santik
Зарегистрирован: 2016-07-18
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление новых переменных

4kpt_IV
Используйте список.
  def added(self):
self.u +=1
self.var_text = Label(self, text='your potencial expenses').grid(row=self.u, column=0, sticky=W)
self.var = Entry(self)
self.var.grid(row=self.u,column=1, sticky=W)
self.spisok += self.var.get()
# self.p = self.var.get()

self.your_buy_text = Label(self, text='what u want?').grid(row=self.u,column=2, sticky=W)
self.your_buy = Entry(self).grid(row=self.u,column=3, sticky=W)
self.new_vars += 1

def math(self):
capital = self.your_money.get()
a = self.your_expenses2.get()
b = self.your_expenses.get()
g = self.your_expenses3.get()
# p = self.var.get()
if self.new_vars > 0:
p = 0
for i in self.spisok:
i = int(i)
p += i
# p = self.var.get()
c = int(a) + int(b) + int(g)+int(p)
else:
c = int(a) + int(b) + int(g)
d = int(capital) - int(c)
Это то, что изменил. Сначала, добавив список, была проблема с тем, что все равно, добавлялась только последняя переменная, т.к def added при инициализации создает же как бы пустую переменную, которая, видимо, и шла в список. Собственно, это и сейчас, видимо, так.

2 проблема связана с тем, что for i in self.spisok: int(i) - дает ошибку. ValueError: invalid literal for int() with base 10: ‘' . Если же убрать i = int(i) - дает ошибку невозможности конкатенации str() и int()

Вообще, в какой момент, в данном случае, с переменной var будет считываться .get ? В момент ’click me'? Но, в таком случае, когда добавлять значение в список то?

Офлайн

#4 Авг. 2, 2016 09:47:29

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Добавление новых переменных

Когда считываете с помощью .get() тогда и добавляете. Мало того, можно поставить перехватчика, который в поле не даст ввести ничего кроме цифр…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version