为什么我无法更新变量值并返回self.func(* args)?

时间:2014-09-06 18:57:41

标签: python tkinter

我正在使用以下内容从programa1为新对象发送变量值:

def send_price(self):
    self.pricesend = float(self.text1.get()) #this take a value from a tkinker.Entry
    print(self.pricesend)
    objetoprograma1.Object(self.pricesend)

对象“objetoprograma1”使用以下命令返回一个新值:

class Object():

    def __init__(self, price):

        self.price_recibe = float(price)
        print(self.price_recibe)

        self.new_price = self.price_recibe + 10
        print(self.new_price)

        programa1.Aplication.recibe_newprice(self, float(self.new_price))

现在我要更新名为principal1的{​​{1}} tkinter.Entry中的值:

self.text1

我有以下例外:

def recibe_newprice(self,  new_price):

    self.new_price = new_price
    print("price new recibe" , self.new_price)

    ## this don't work.. this don't update or change the value in the tkinter.Entry

    self.text1.delete(0, len(self.text1.get()))
    self.text1.insert(self.my_main, str(self.new_price))

完整Exception in Tkinter callback Traceback (most recent call last): File "C:\Python34\lib\tkinter\__init__.py", line 1482, in __call__ return self.func(*args) File "B:\MAESTRIA\PYTHON\trabajos\hello\programa1.py", line 38, in send_price objetoprograma1.Object(self.pricesend) File "B:\MAESTRIA\PYTHON\trabajos\hello\objetoprograma1.py", line 19, in __init__ programa1.Aplication.recibe_newprice(self, float(self.new_price)) File "B:\MAESTRIA\PYTHON\trabajos\hello\programa1.py", line 51, in recibe_newprice self.text1.delete(self.my_main, len(self.text1.get())) AttributeError: 'Object' object has no attribute 'text1'

programa1.py

# -*- coding: latin-1 -*- import tkinter import objetoprograma1 import time class Aplication(): def __init__(self,my_main): self.my_main = my_main self.variables() self.GUI() def variables (self): self.price = None self.list = [] def GUI(self): self.text1 = tkinter.Entry() self.text1.insert(0, "1000") self.text1.grid(column = 0, row = 0) self.boton1 = tkinter.Button(self.my_main, text = "sendprice", command = self.send_price ) self.boton1.grid(column=1, row = 0) def send_price(self): self.pricesend = float(self.text1.get()) print(self.pricesend) objetoprograma1.Object(self.pricesend) def recibe_newprice(self, new_price): self.new_price = new_price print("price new recibe" , self.new_price) ## this don't work self.text1.delete(0, len(self.text1.get())) self.text1.insert(self.my_main, str(self.new_price)) if __name__ == "__main__": root = tkinter.Tk() #root.geometry("800x500+0+0") root.title("titulo") app = Aplication(my_main=root) root.mainloop()

objetoprograma1.py

1 个答案:

答案 0 :(得分:0)

查看您的Object类并查看异常消息。您正在调用recibe_newprice方法,但是将Object实例传递给它(对象没有text1属性)。 recibe_newprice是为Aplication类编写的,因此期望self成为Aplication类的实例。您似乎正在混淆类的用途或self参数的工作原理。

我的第一个提示是用更具描述性的名称命名。 ObjectApplicationProgram1等名称不会告诉读者有关这些对象的用途的信息。

其次,你知道类和函数之间的区别吗?也许这会有所帮助。我会用这种方式编写send_price方法:

def send_price(self, price_recibe):
    pricesend = float(self.text1.get())
    print(pricesend)
    print(price_recibe)

    new_price = price_recibe + 10
    print(new_price)
    self.recibe_newprice(new_price)

如果这没有意义,为什么我这样做,或为什么这可能比你做的更好/更容易,那么我建议研究如何python类,属性赋值和参数通过工作。