使用来自不同类的函数来连接信号

时间:2013-01-22 22:19:01

标签: python qt pyside

您好我正在制作一个程序,我正在使用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"

有人可以解释为什么我点击按钮时没有打印出来?

1 个答案:

答案 0 :(得分: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"