ホームページ >バックエンド開発 >Python チュートリアル >UI の変更中に Qt デザイナーがカスタム コードを上書きしないようにするにはどうすればよいですか?
Qt デザイナーのオーバーライドの問題: UI 変更中のコード変更の保持
Qt デザイナーを使用して GUI を設計する場合、次のことを行うのが一般的です。特定の機能のために生成されたコードを変更します。ただし、これらの変更は、その後 UI を変更すると失われる可能性があります。
解決策:
この問題を回避するには、UI デザインをカスタム コードから分離することをお勧めします。これは、Qt Designer クラスから継承し、保持したいロジックを含む新しいクラスを作成することで実現できます。
たとえば、Qt Designer デザインの名前が Ui_Design.py の場合、次のコード構造を使用できます。使用する場合:
# Ui_Design.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): [...] def retranslateUi(self, MainWindow): [...]
カスタム ロジックを実装し、デザインを
# logic.py from PyQt5 import QtCore, QtGui, QtWidgets from Ui_Design import Ui_MainWindow class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self)
このアプローチを採用すると、UI デザインが変更されて再生成された場合でも、logic.py 内のカスタム コードはそのまま残ります。
追加メモ: カスタム ロジックのクラス構造
これを効果的に実装するには、カスタム ロジック クラスは特定の規則に従う必要があります。構造:
class Logic(PyQtClass, DesignClass): def __init__(self, *args, **kwargs): PyQtClass.__init__(self, *args, **kwargs) self.setupUi(self)
ここで:
メッセージ ボックスを閉じるためのコードを保持する例:
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()
この実装により、closeEvent ハンドラーなどのカスタム ロジックが確実に維持されます。 Qt Designer で行われた後続の UI 変更の影響を受けません。
以上がUI の変更中に Qt デザイナーがカスタム コードを上書きしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。