Pyside Qt 设计器输出文件连接槽问题

Pyside Qt designer output file connecting slots issue

我使用 QT Designer 创建了一个对话框并使用 pyside-uic

转换为 Python

该程序是一个简单的按钮,因为我目前正在学习 pyside,我想将该按钮连接到一个名为 'buttonpushed' 的函数,只是为了在单击该按钮时打印 "button pushed" 尽管在线关注教程我的按钮不起作用。

当我只是在按钮中编写代码时,不会发生此错误,但是当我使用设计器时,它变成了一个对话框,我无法让它工作。

from PySide import QtCore, QtGui

class Ui_Dialog(object):
def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(400, 300)
    self.pushButton = QtGui.QPushButton(Dialog)
    self.pushButton.setGeometry(QtCore.QRect(160, 120, 71, 23))
    self.pushButton.setObjectName("pushButton")

    self.retranslateUi(Dialog)

    QtCore.QMetaObject.connectSlotsByName(Dialog)


def retranslateUi(self, Dialog):
    Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
    self.pushButton.setText(QtGui.QApplication.translate("Dialog", "PushButton", None, QtGui.QApplication.UnicodeUTF8))


def buttonpushed(self):
    print 'buttonpushed'


if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())

你要做的就是将信号与所需的功能连接起来,你可以在 class 内部或外部进行。

{yourobject}.{object signal}.connect({your slot})

代码:

from PySide import QtCore, QtGui

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(160, 120, 71, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Dialog)

        QtCore.QMetaObject.connectSlotsByName(Dialog)

        self.pushButton.clicked.connect(self.buttonpushed)



    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("Dialog", "PushButton", None, QtGui.QApplication.UnicodeUTF8))


    def buttonpushed(self):
        print('buttonpushed')


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

另一种解法:

from PySide import QtCore, QtGui

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(160, 120, 71, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Dialog)

        QtCore.QMetaObject.connectSlotsByName(Dialog)



    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("Dialog", "PushButton", None, QtGui.QApplication.UnicodeUTF8))


    def buttonpushed(self):
        print('buttonpushed')


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    ui.pushButton.clicked.connect(ui.buttonpushed)
    Dialog.show()
    sys.exit(app.exec_())