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 ) )

たとえば、inputbox に「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():、定義で do を実行しないでください。 do を実行し、 likeと notclass App:をインスタンス化するようにしてください。foo = App()foo = App

于 2013-05-21T01:03:42.607 に答える