2017-01-06 1 views
0

Ich kann nicht herausfinden, warum meine benutzerdefinierten Slots, die ich im QT-Ersteller erstellt habe, nicht in der transformierten Python-Datei enthalten sind. Grundsätzlich pyuic berücksichtigt nicht die .cpp Datei. Alle dort vorgenommenen Änderungen sind nicht in der späteren Datei .py enthalten.pyuic von PyQT berücksichtigt keine benutzerdefinierten Slots

Zum Beispiel meiner .cpp Datei zeigt diesen Teil:

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; 
} 

jedoch die Python-Datei nicht diese Klasse oder irgendetwas nicht nennen, die in der .cpp Datei.

Meine Python-Datei sieht wie folgt aus:

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

Ist eine Lösung für dieses jemand weiß? Gibt es eine Möglichkeit, das gesamte Projekt in Python und nicht nur die Datei .ui zu übersetzen?

Vielen Dank im Voraus

+0

No - pyuic konvertiert nur die .ui - Datei. Außerdem gibt es keine Tools von Drittanbietern, die beliebigen C++ - Code in Python-Code übersetzen können. Ich schlage vor, dass Sie nur lernen, wie Sie die Portierung selbst durchführen (es ist nicht besonders schwierig). – ekhumoro

Antwort

0

Dies war zu lang für einen Kommentar:

Es gibt keine Art und Weise ist es, „das gesamte Projekt in Python zu übersetzen“. Der Qt Designer generiert eine .ui-Datei, die Sie dann über puic oder eine C++ - Datei via uic in eine .py-Datei konvertieren. Dann müssen Sie den entsprechenden "Logik" -Code schreiben, der Ihre UI-Datei instanziiert, wie Sie (oder jemand) in C++ getan haben; Sie müssen dasselbe in Python tun.

Allerdings ist die manuelle Übersetzung der C++ Logikdatei nach Python normalerweise relativ einfach für 90% des Codes, dann können die letzten 10% ein großer Kopfschmerz sein :) Es hängt wirklich davon ab, was Ihr C++ tut.

Geben Sie es eine Chance, und wenn Sie auf irgendwelche Probleme stoßen, schlage ich vor, dass Sie Ihre Frage ändern, um speziell zu diesen Fragen zu fragen. Andernfalls sollten Sie diese Frage löschen.

Verwandte Themen