PEHDOM
конкатенация строк плохо, используйте format(), join(), или f-строки
что такое name.name, name.price, name.ib? откуда ваша функция знает что такие объекты существует? в вашем коде ничего такого нет.
Не совсем понял, то вы имеете ввиду, в связи со своей не опытностью.
На этапе создания своих “кирпичиков” писал вот такой скрип:
class Data():
def __init__ (self, name, price, ib):
self.name = name
self.price = price
self.ib = ib
def file():
## Записываем данные в файл text ##
text = open('text.txt', 'a')
text.write(str(name.name)+ " " +str(name.price) +" "+ str(name.ib)+ " " + "\n")
text.close()
while 1==1:
name = input("Имя: ", )
price = input("Цена: ", )
ib = id(name)
name = Data(name, price, ib)
file()
И этот скрип в принципе работает.
Этот скрип я делал на основе выше на писаного “кирпичика”
from tkinter import *
import tkinter as tk
class Data():
def __init__(self, name, price, ib):
self.name = name
self.price = price
self.ib = ib
def vvod_data():
intiker = intik.get()
inprice = inpri.get()
try:
## Делаем проверку на числовой ввод в Entry (т.е. если будут в строку вводится не цифры, пишет fault##
inprice = float(inprice)
ib = 123
name = str(intiker)
price =str(inprice)
name = Data(name, price, ib)
wrfile()
except:
print("fault")
def wrfile():
## Записываем в файл данные ##
text = open('Base.txt', 'a')
text.write(str(name.name)+ " " +str(name.price) +" "
+ str(name.ib)+ " " + "\n")
text.close()
Теперь попробую пояснить как это должно работать:
Есть часть кода где создается окно (tkinter), в нем три виджета ( Entry1, Entry2, Batton1)
Соответственно intik = Entry1; insech = Entry2. При нажатие на кнопку переходим в функцию
vvod_data(). Там вынимаем данные из Entry1, Entry2. Делаем проверку что в Entry2 только цифры.
ib = 123
name = str(intiker)
price =str(inprice)
name = Data(name, price, ib)
этими строчками мы создаем переменную (не знаю как ее правильно назвать) в классе Data()
Дальше идем в функцию wrfile(). Собственно там мы открываем фаил и записываем в него строчки из класса Data(). Я вообще правильно мыслю ?
Почему то в первом случае работает, во втором нет?!
я понимаю что можно выйти из ситуации вот так:
def vvod_data():
intiker = intik.get()
inprice = inpri.get()
try:
## Делаем проверку на числовой ввод в Entry (т.е. если будут в строку вводится не цифры, пишет fault##
inprice = float(inprice)
ib = 123
name = str(intiker)
price =str(inprice)
wrfile(name, price, ib)
except:
print("fault")
def wrfile(name, price, ib):
## Записываем в файл данные ##
text = open('Base.txt', 'a')
text.write(str(name)+ " " +str(price) +" "
+ str(ib)+ " " + "\n")
text.close()