2017-10-03 9 views
0

私はQtDesingerを使用しています。QtDesingerを使用しています.QtDesingerでデザインしたいGUIをデザインした後、Pythonコードに変換してから、私のPythonコードが、私はQtDesignerでUIを変更し、再びPythonコードに変換する場合、私は自分のコード上で私の以前の変更を失った。 問題を解決するにはどうすればよいですか? 他のファイルにコードを書き込むために、Pythonで複数のファイルにまたがるクラスを広げることはできますか?PyQt5 Qtデザイナーの変更は再設計後に失われるユーザーインターフェイス

+0

使用方法を示す例についてはPyQt5ドキュメントに(http://pyqt.sourceforge.net/Docs/PyQt5/designer.html#using-the-generated-code)[のQt Designerを使用]を参照してくださいpyuicによって生成されたコード。 – ekhumoro

答えて

3

これらの問題を避けるために、このファイルを変更するのではなく、そのデザインを使用するクラスを実装する新しいファイルを作成することをお勧めします。例えば

、次の構造に似Ui_Design.pyに変換し、その後、あなたはdesign.uiファイルにMainWindowテンプレートを使用していたとします

from PyQt5 import QtCore, QtGui, QtWidgets 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     [...] 

    def retranslateUi(self, MainWindow): 
     [...] 

その後、我々は我々がlogic.pyどこを呼び出します新しいファイルを作成します。

class Logic(QMainWindow, Ui_MainWindow): 
    def __init__(self, *args, **kwargs): 
     QMainWindow.__init__(self, *args, **kwargs) 
     self.setupUi(self) 

ですから、デザインを変更し、再度ファイルを生成する場合でも、変更する必要はありませんの.py:我々はロジックを処理し、それは以前のデザインを使用してファイルを作成します。ロジックのファイル

我々は次のルールを持っている必要がありますアイデアを一般化するのではなく、このための論理クラスには、次の構造を持っている必要があります。

class Logic(PyQtClass, DesignClass): 
    def __init__(self, *args, **kwargs): 
     PyQtClass.__init__(self, *args, **kwargs) 
     self.setupUi(self) 
  • PyQtClassを:このクラスは、選択したデザインに依存します。
 

    Template      PyQtClass 
───────────────────────────────────────────── 
    Main Window     QMainWindow 
    Widget      QWidget 
    Dialog with Buttons Bottom QDialog 
    Dialog with Buttons Right  QDialog 
    Dialog with Without Buttons QDialog 
 
  • DesignClass:あなたのデザインに表示されるクラスの名前。
0

最も簡単な方法は、* .uiファイルをPythonコードで直接使用することです.Uiを変更するたびに* .pyファイルに変換する必要はありません。 この疑似コードはプロジェクトで使用できます。

# imports 
from PyQt5 import uic 

# load ui file 
baseUIClass, baseUIWidget = uic.loadUiType("MainGui.ui) 

# use loaded ui file in the logic class 
class Logic(baseUIWidget, baseUIClass): 
    def __init__(self, parent=None): 
     super(Logic, self).__init__(parent) 
     self.setupUi(self) 
     . 
     . 
     . 
     . 

def main(): 
    app = QtWidgets.QApplication(sys.argv) 
    ui = Logic(None) 
    ui.showMaximized() 
    sys.exit(app.exec_()) 
関連する問題