Maison >développement back-end >Tutoriel Python >Comment empêcher Qt Designer d'écraser le code personnalisé lors des modifications de l'interface utilisateur ?

Comment empêcher Qt Designer d'écraser le code personnalisé lors des modifications de l'interface utilisateur ?

DDD
DDDoriginal
2024-12-25 16:13:10705parcourir

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

Problème de remplacement de Qt Designer : préservation des modifications de code lors des modifications de l'interface utilisateur

Lors de l'utilisation de Qt Designer pour concevoir une interface graphique, il est courant de faire modifications du code généré pour des fonctionnalités spécifiques. Cependant, ces modifications peuvent être perdues lors des modifications ultérieures de l'interface utilisateur.

Solution :

Pour éviter ce problème, il est recommandé de séparer la conception de l'interface utilisateur du code personnalisé. Ceci peut être réalisé en créant une nouvelle classe qui hérite de la classe Qt Designer et inclut la logique que vous souhaitez conserver.

Par exemple, si la conception Qt Designer s'appelle Ui_Design.py, la structure de code suivante peut être utilisé :

# Ui_Design.py
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        [...]

    def retranslateUi(self, MainWindow):
        [...]

Créez un fichier séparé, logic.py, pour implémenter la logique personnalisée et utiliser la conception comme suit :

# 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)

En adoptant cette approche, même si la conception de l'interface utilisateur est modifiée et régénérée, le code personnalisé dans logic.py restera intact.

Remarque supplémentaire : Structure de classe pour la logique personnalisée

Pour implémenter cela efficacement, la classe de logique personnalisée doit suivre un spécifique structure :

class Logic(PyQtClass, DesignClass):
    def __init__(self, *args, **kwargs):
        PyQtClass.__init__(self, *args, **kwargs)
        self.setupUi(self)

où :

  • PyQtClass dépend du modèle Qt Designer utilisé (par exemple, QMainWindow pour le modèle MainWindow)
  • DesignClass est le nom du classe dans le fichier de conception (par exemple, Ui_MainWindow)

Exemple de conservation du code pour la boîte de message de fermeture :

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()

Cette implémentation garantit que votre logique personnalisée, telle que le gestionnaire closeEvent, reste non affecté par les modifications ultérieures de l'interface utilisateur apportées avec Qt Designer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn