"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 코드 변경 사항을 잃지 않고 Qt Designer UI를 어떻게 업데이트할 수 있습니까?

코드 변경 사항을 잃지 않고 Qt Designer UI를 어떻게 업데이트할 수 있습니까?

2025-01-25에 게시됨
검색:800

How Can I Update My Qt Designer UI Without Losing My Code Changes?

변경 사항을 덮어쓰지 않고 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)

위치:

  • PyQtClass는 디자인 템플릿(예: QMainWindow, QWidget)에 따라 다릅니다.
  • DesignClass 디자인에 포함된 클래스의 이름입니다(예: Ui_MainWindow).

추가 이점:

이 구현을 사용하면 상위 창의 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