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
Libérer: 2024-12-25 16:13:10
original
753 Les gens l'ont consulté

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):
        [...]
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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()
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal