変更を上書きせずに QtDesigner UI を更新する
Qt Designer で行われた UI の変更がコード変換後に上書きされる問題が発生した場合この記事では、変更を保存するための解決策を提供します。
この問題に対処するには、生成された Python コードを直接変更しないようにします。代わりに、UI ロジックを処理するための別のクラスを新しいファイルに作成します。このクラスは、Qt Designer によって生成されたデザイン クラスを継承し、そのメソッドを実装する必要があります。
例:
対応する design.ui ファイルを含む MainWindow テンプレートを考えてみましょう。次のように Ui_Design.py に変換します:
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)
これらのルールに従うことで、ロジックの実装に影響を与えることなく、デザインを変更してコードを再生成できます。ロジック クラスが次の構造に従っていることを確認してください:
class Logic(PyQtClass, DesignClass): def __init__(self, *args, **kwargs): PyQtClass.__init__(self, *args, **kwargs) self.setupUi(self)
ここで:
追加の利点:
この実装により、親ウィンドウの closeEvent で pyqt messageBox を閉じるなど、指定されたウィジェット内にロジックを実装できます。
class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self) def closeEvent(self, event): answer = QtWidgets.QMessageBox.question( self, 'Are you sure you want to quit ?', 'Task is in progress !', QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No ) if answer == QtWidgets.QMessageBox.Yes: event.accept() else: event.ignore()
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3