2017-01-06 4 views
0

QTクリエイターで作成したカスタムスロットが変換されたpythonファイルでない理由がわかりません。基本的にpyuicは、.cppファイルを考慮しません。そこに加えられた変更は、後で.pyファイルにはありません。PyQTのpyuicはカスタムスロットを考慮していません

例えば私の.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_()) 

は、誰もがこのための解決策を知っていますか? .uiファイルだけでなく、プロジェクト全体をPythonに変換する方法はありますか?事前

+0

いいえpyuicは.uiファイルのみを変換します。また、任意のC++コードをPythonコードに変換できるサードパーティのツールはありません。私は、自分で移植する方法を学ぶことをお勧めします(特に難しいことではありません)。 – ekhumoro

答えて

0

多くのおかげでこれはコメントのために長すぎました:

「のpythonにプロジェクト全体を変換」する方法はありません。 Qtデザイナーは.uiファイルを生成します。このファイルは、pyuicまたはC++ファイル経由で.pyファイルに変換されます。次に、C++で行ったように、UIファイルをインスタンス化する対応する「ロジック」コードを記述する必要があります。 Pythonで同じことをする必要があります。

しかし、C++ロジックファイルをPythonに手作業で翻訳することは、通常コードの90%で比較的簡単です。最後の10%は大きな頭痛になることがあります。実際はC++の機能によって異なります。

問題が発生した場合は、質問を修正して問題を具体的に質問することをおすすめします。それ以外の場合は、この質問を削除する必要があります。

関連する問題