PyQT 按钮点击不起作用

PyQT Button click doesn't work

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

我的问题是尽管调用了 clicked.connect 函数并且在 运行 代码上没有错误,但我的按钮似乎无法点击。下面是按钮的相关部分 class:

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:

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)

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

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.