>백엔드 개발 >파이썬 튜토리얼 >UI 수정 중에 Qt Designer가 사용자 정의 코드를 덮어쓰는 것을 방지하는 방법은 무엇입니까?

UI 수정 중에 Qt Designer가 사용자 정의 코드를 덮어쓰는 것을 방지하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-25 16:13:10672검색

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

Qt Designer 재정의 문제: UI 변경 중 코드 수정 사항 유지

Qt Designer를 사용하여 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를 생성하여 사용자 정의 로직을 구현하고 디자인을 다음과 같이 사용합니다. 다음:

# 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 Designer가 사용자 정의 코드를 덮어쓰는 것을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.