1

こんにちは私はプログラムを作成していて、stackedLayoutを使用してプログラム内のさまざまな「領域」を表示しています。クラスを使用して、特定の領域に関連する関数を「分離」したいと思います。たとえば、Area1にはスタートボタンとクリアボタンがあり、スタートボタンを押すとプログラムが実行され、クリアボタンを押すとエリアがクリアされます。メインクラス内で開始およびクリアする関数を定義すると、ボタンは正常に機能しますが、別のクラスからそれらを呼び出すと、何も起こりません。

main.py

class Program(QtGui.QMainWindow, Interface.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Program, self).__init__(parent)
        self.setupUi(self)

        run = hello()
        self.startButton.clicked.connect(run.hello1)
        self.clearButton.clicked.connect(run.hello2)

class hello(object):
    def hello1(self):
        print "start button"

    def hello2(self):
        print "stop button"

ボタンをクリックしても何も印刷されない理由を教えてください。

4

1 に答える 1

2

helloインスタンスへの参照を保持していません。そのため、終了後にガベージコレクション__init__が行われ、ボタンを押しても使用できません。

ローカル変数 ( )self.runではなく、インスタンス属性 ( ) として保存してみてください。run

class Program(QtGui.QMainWindow, Interface.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Program, self).__init__(parent)
        self.setupUi(self)

        self.run = hello()
        self.startButton.clicked.connect(self.run.hello1)
        self.clearButton.clicked.connect(self.run.hello2)

class hello(object):
    def hello1(self):
        print "start button"

    def hello2(self):
        print "stop button"
于 2013-01-22T22:59:43.930 に答える