将QPushButon连接到PyQt

时间:2016-06-01 11:44:50

标签: python pyqt qpushbutton

我正在尝试将在课程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

希望你能帮助我。

2 个答案:

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