Qt デザイナーを利用して Python のグラフィカル ユーザー インターフェイス (GUI) を設計する場合、変更というイライラする問題が発生する可能性があります。生成された Python コードに加えられた内容は、UI が再設計されると失われます。これは、特に特定の機能のコードをカスタマイズするのに多大な労力を費やした場合に、非常に不便になる可能性があります。
この問題を解決する鍵は、デザインとロジックを分離することにあります。 UI の機能を処理するコードからの UI デザイン。生成された Python コードを直接変更する代わりに、デザインを使用するがロジックを個別に処理する新しいクラスを作成します。
Qt の MainWindow テンプレートを使用した次の例を考えてみましょう。デザイナー:
Ui_MainWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): [...] def retranslateUi(self, MainWindow): [...]
logic.py
from Ui_MainWindow import Ui_MainWindow class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self)
このアプローチを採用すると、 Qt Designer のコードに影響を与えることなく、デザインを変更できます。 logic.py.
PyQtClass の選択は、選択した設計テンプレートによって異なります。
Template | PyQtClass |
---|---|
Main Window | QMainWindow |
Widget | QWidget |
Dialog with Buttons Bottom | QDialog |
Dialog with Buttons Right | QDialog |
Dialog with Without Buttons | QDialog |
この実装ウィンドウを閉じるイベントの処理など、ロジック クラス内での高度なロジックの実装が可能になります。以下に例を示します:
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()
以上がQt デザイナー UI を再設計するときにカスタム コードの損失を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。