我无法弄清楚为什么我在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
文件?
非常感谢提前
答案 0 :(得分:0)
评论太长了:
没有办法“将整个项目翻译成python”。 Qt Designer生成一个.ui文件,然后通过uic将其转换为pyuic或C ++文件的.py文件。然后你必须编写实例化你的UI文件的相应“逻辑”代码,正如你(或某人)在C ++中所做的那样;你必须在Python中做同样的事情。
但是,对于90%的代码,手动将C ++逻辑文件转换为Python通常相对简单,然后最后10%可能是一个令人头疼的问题:)这实际上取决于您的C ++的功能。
试一试,如果您遇到任何问题,我建议您修改您的问题,专门询问这些问题。否则,您应该删除此问题。