我正在尝试将在课程QPushButton
中创建的A
与在课程B
中创建的方法相关联。这是我的代码:
class A(QMainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
#A lot of stuff in here
def Button(self):
self.btn = QPushButton()
self.connect(self.btn, SIGNAL("clicked()"), B().method_1)
class B(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
#Another stuff in here too
def method_1(self):
pass
但是,它没有用。我读过这篇文章:
Send and receive signals from another class pyqt
它说我可以创建pyqtSignal
。还有另一种方法吗?我的意思是,要将课程QPushButton
中的a
与课程method_1
中的B
相关联。希望你能帮帮我。
我必须对我的代码进行一些修改,然后删除button
方法,并将其放在toolbar
中。所以现在我有了这个:
class A(QMainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
#A lot of stuff in here
self.toolbar = QToolBar(self)
self.btn = QPushButton()
self.toolbar.addWidget(self.btn)
self.connect(self.btn, SIGNAL("clicked()"), B().method_1)
class B(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
#Another stuff in here too
def method_1(self):
pass
希望你能帮助我。
答案 0 :(得分:0)
Normal.
Look at your code:
def Button(self):
self.btn = QPushButton()
self.connect(self.btn, SIGNAL("clicked()"), B().method_1)
After self.connect() is called, B objet no longer exists. Therefore, when you click on your button, the handler B.method_1 does not exist anymore. Try passing B in parameter of A.Button() method.
def Button(self, B_class):
self.btn = QPushButton()
self.connect(self.btn, SIGNAL("clicked()"), B_class.method_1)
答案 1 :(得分:0)
一种简单的方法是在A类中创建B的对象:
self.b = B()
然后您可以在A.__init__
中使用此对象的method_1:
self.connect(self.btn, SIGNAL("clicked()"), self.b.method_1)
如果您不想创建B的新实例,则可以改为向构造函数添加参数:
class A(QMainWindow):
def __init__(self, b):
# ...code...
self.connect(self.btn, SIGNAL("clicked()"), b.method_1)