【问题标题】:Pyside Qt designer output file connecting slots issuePyside Qt 设计器输出文件连接插槽问题
【发布时间】:2017-06-07 09:49:56
【问题描述】:

我使用 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_())

【问题讨论】:

    标签: python pyqt pyqt4 pyside pyqt5


    【解决方案1】:

    你要做的就是把信号和想要的功能连接起来,你可以在课堂内外做。

    {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_())
    

    【讨论】:

    • 太好了,效果很好,有什么方法可以从 Ui_Dialog 类外部连接它吗?
    • @WilliamHamilton 更新我的答案,如果它可以帮助您将其标记为正确,请。
    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2016-07-27
    • 2020-10-01
    • 2016-03-11
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多