0

事情是这样的:我的程序是一个用 python/GTK 编写的基于 GUI 的计算器。在第一个版本中我没有使用类,所以这里是一段旧代码:

def show(result):
     textbox3.set_text( str(result) )
     (...) # Update counters, etc.

def on_button_pressed(*args):
    input_user = inputbox.get_text() 
    (...) # parsing of the input
    show( eval( input_user ) )

例如,如果我在输入框“12+3”上输入并按下按钮,textbox3 会显示结果“15”。

我已经修改了我的项目以使用 OOP。这是修改后的代码:

class App:
    (...)

    def show(self,result):
         self.textbox3.set_text( str(result) )
         (...) # Update counters, etc.

    def on_button_pressed(self,*args):
        input_user = self.inputbox.get_text() 
        (...) # parsing of the input
        print input_user
        self.show( eval( input_user ) )

使用此代码,textbox3 显示结果"<app.c12app.App instance at 0x272e128>"。我在这里犯了哪个错误?

PS:真实代码太大,解析部分大概50行大。我添加了一行print input_user来证明解析不会覆盖变量input_user。控制台打印正确解析的表达式(字符串)。但是当我eval在这个字符串中使用函数时,它返回一个对象,而不是表达式的数值。

4

2 回答 2

1

这可能是几件事。首先,不要class App():在你的定义中做,做class App:,并确保你实例化 likefoo = App()和 not foo = App

于 2013-05-21T01:03:42.607 回答
0

我发现了我的错误。我应该将 show 函数定义为

def show(self, dummy, result):

独立地,如果我只将一个参数传递给函数(如在 中self.show(result),似乎 python 传递了两个“不可见的参数”:第一个是“self”,类的实例,第二个是调用函数的方法(函数 on_button_pressed或按钮对象,我不确定)。这有点令人困惑......

第一个和第二个论点对我来说没用,但显然我被迫声明它们。

于 2013-05-21T01:39:46.343 回答