使用其他类的函数连接信号

1 投票
1 回答
817 浏览
提问于 2025-04-17 13:23

你好,我正在制作一个程序,使用了一个堆叠布局来展示程序中的不同“区域”。我想用类来“分开”与某些区域相关的功能。例如,区域1有一个开始按钮和一个清除按钮,当按下开始按钮时,程序就会运行;而当按下清除按钮时,该区域就会被清空。当我在主类中定义开始和清除的功能时,按钮工作得很好,但当我从另一个类调用这些功能时,什么也没有发生。

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 个回答

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"

撰写回答