来自PyQT的pyuic不考虑自定义插槽

时间:2017-01-06 12:31:10

标签: python pyqt pyqt4

我无法弄清楚为什么我在QT创建者中创建的自定义插槽不在转换后的python文件中。基本上 pyuic 不会考虑.cpp文件。在那里进行的任何更改都不在后面的.py文件中。

例如,我的.cpp文件显示了这一部分:

void MainWindow::on_pushButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,
                       "Open xls File", ".", "xls files (*.xls)" );
    if ( fileName.isEmpty() )
      return;

    QFile file( fileName );
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
       return;
}

然而,python文件不会调用此类或.cpp文件中的任何内容。

我的python文件如下所示:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(486, 300)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.radioButton = QtWidgets.QRadioButton(self.centralWidget)
        self.radioButton.setGeometry(QtCore.QRect(10, 40, 100, 22))
        self.radioButton.setChecked(True)
        self.radioButton.setObjectName("radioButton")
        self.radioButton_2 = QtWidgets.QRadioButton(self.centralWidget)
        self.radioButton_2.setGeometry(QtCore.QRect(10, 90, 121, 22))
        self.radioButton_2.setObjectName("radioButton_2")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(370, 90, 85, 27))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit.setGeometry(QtCore.QRect(130, 40, 211, 27))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit2 = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit2.setGeometry(QtCore.QRect(130, 90, 211, 27))
        self.lineEdit2.setObjectName("lineEdit2")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2.setGeometry(QtCore.QRect(370, 200, 85, 27))
        self.pushButton_2.setObjectName("pushButton_2")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralWidget)
        self.plainTextEdit.setGeometry(QtCore.QRect(130, 130, 211, 91))
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(370, 130, 91, 31))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 486, 27))
        self.menuBar.setObjectName("menuBar")
        MainWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(MainWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        MainWindow.insertToolBarBreak(self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)

        self.retranslateUi(MainWindow)
        self.radioButton.toggled['bool'].connect(self.lineEdit.setEnabled)
        self.radioButton.toggled['bool'].connect(self.lineEdit2.setDisabled)
        self.radioButton_2.toggled['bool'].connect(self.lineEdit.setDisabled)
        self.radioButton_2.toggled['bool'].connect(self.lineEdit2.setEnabled)
        self.radioButton.toggled['bool'].connect(self.pushButton.setDisabled)
        self.radioButton_2.toggled['bool'].connect(self.pushButton.setEnabled)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.radioButton.setText(_translate("MainWindow", "Single SMS"))
        self.radioButton_2.setText(_translate("MainWindow", "SMS to Contacts"))
        self.pushButton.setText(_translate("MainWindow", "Add .xls"))
        self.pushButton_2.setText(_translate("MainWindow", "Send it!"))
        self.label.setText(_translate("MainWindow", "Message Text"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

有谁知道这方面的解决方案?有没有办法将整个项目翻译成python而不仅仅是.ui文件?

非常感谢提前

1 个答案:

答案 0 :(得分:0)

评论太长了:

没有办法“将整个项目翻译成python”。 Qt Designer生成一个.ui文件,然后通过uic将其转换为pyuic或C ++文件的.py文件。然后你必须编写实例化你的UI文件的相应“逻辑”代码,正如你(或某人)在C ++中所做的那样;你必须在Python中做同样的事情。

但是,对于90%的代码,手动将C ++逻辑文件转换为Python通常相对简单,然后最后10%可能是一个令人头疼的问题:)这实际上取决于您的C ++的功能。

试一试,如果您遇到任何问题,我建议您修改您的问题,专门询问这些问题。否则,您应该删除此问题。