PyQT的pyuic不考虑自定义插槽

2024-10-02 02:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么我在QT creator中创建的自定义槽不在转换后的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文件?你知道吗

非常感谢


Tags: 文件selftranslateqtcoreqtwidgetspushbuttonsetobjectnamesetgeometry
1条回答
网友
1楼 · 发布于 2024-10-02 02:36:18

这太长了,无法发表评论:

没有办法“将整个项目翻译成python”。Qt设计器生成一个.UI文件,然后通过UIC通过PUIC或C++文件转换成.pY文件。然后,你必须编写相应的“逻辑”代码来实例化UI文件,就像你(或某人)在C++中那样做;你必须在Python中做同样的操作。你知道吗

但是,将C++逻辑文件手动翻译为Python通常相对简单,对于90%的代码,最后10%可能是一个主要的头痛:它确实取决于C++所做的。你知道吗

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

相关问题 更多 >

    热门问题