PyQT按钮单击不起作用

时间:2015-04-22 19:59:45

标签: python qt pyqt qt4 pyqt4

所以我的问题是,我不是手动为一堆按钮编写大量代码,而是想为QPushButton创建一个类,然后在调用该类创建单个按钮时更改这么多变量。

我的问题是,尽管调用clicked.connect函数并且在运行代码时没有错误,但我的按钮似乎不可点击。以下是按钮类的相关部分:

class Button(QtGui.QPushButton):
    def __init__(self, parent):
        super(Button, self).__init__(parent)
        self.setAcceptDrops(True)

        self.setGeometry(QtCore.QRect(90, 90, 61, 51))
        self.setText("Change Me!")

    def retranslateUi(self, Form):
        self.clicked.connect(self.printSomething)

    def printSomething(self):
        print "Hello"

以下是我如何调用按钮类:

class MyWindow(QtGui.QWidget):
    def __init__(self):
        super(MyWindow,self).__init__()
        self.btn = Button(self)

        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.btn)
        self.setLayout(layout)

1 个答案:

答案 0 :(得分:2)

您应该在__init__方法上执行与点击的信号的连接:

from PyQt4 import QtGui,QtCore

class Button(QtGui.QPushButton):
    def __init__(self, parent):
        super(Button, self).__init__(parent)
        self.setAcceptDrops(True)

        self.setGeometry(QtCore.QRect(90, 90, 61, 51))
        self.setText("Change Me!")
        self.clicked.connect(self.printSomething) #connect here!

    #no need for retranslateUi in your code example

    def printSomething(self):
        print "Hello"

class MyWindow(QtGui.QWidget):
    def __init__(self):
        super(MyWindow,self).__init__()
        self.btn = Button(self)

        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.btn)
        self.setLayout(layout)


app = QtGui.QApplication([])
w = MyWindow()
w.show()
app.exec_()

您可以运行它,并且每次单击按钮时都会在控制台上看到 Hello

retranslateUi方法适用于i18n。您可以查看here