ホームページ >バックエンド開発 >Python チュートリアル >UI の変更中に Qt デザイナーがカスタム コードを上書きしないようにするにはどうすればよいですか?

UI の変更中に Qt デザイナーがカスタム コードを上書きしないようにするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-25 16:13:10676ブラウズ

How to Prevent Qt Designer from Overwriting Custom Code During UI Modifications?

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)

ここで:

  • PyQtClass は、使用される Qt Designer テンプレートに依存します (例: MainWindow テンプレートの場合は QMainWindow)。
  • DesignClass は、設計ファイル内のクラス (例: Ui_MainWindow)

メッセージ ボックスを閉じるためのコードを保持する例:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。