Maison >développement back-end >Tutoriel Python >Comment puis-je éviter de perdre du code personnalisé lors de la refonte des interfaces utilisateur de Qt Designer ?

Comment puis-je éviter de perdre du code personnalisé lors de la refonte des interfaces utilisateur de Qt Designer ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-18 03:19:10793parcourir

How Can I Prevent Losing Custom Code When Redesigning Qt Designer UIs?

Résoudre les modifications perdues dans les refontes de l'interface utilisateur de Qt Designer

Lors de l'utilisation de Qt Designer pour concevoir des interfaces utilisateur graphiques (GUI) pour Python, il est possible de rencontrer un problème frustrant : les modifications apportées au code Python généré sont perdues lors de la refonte de l'interface utilisateur. Cela peut être un inconvénient important, surtout lorsque vous avez investi des efforts considérables dans la personnalisation du code pour des fonctionnalités spécifiques.

Séparation de la conception et de la logique

La clé pour résoudre ce problème réside dans la séparation des Conception de l'interface utilisateur à partir du code qui gère les fonctionnalités de l'interface utilisateur. Au lieu de modifier directement le code Python généré, créez une nouvelle classe qui utilise la conception mais gère la logique séparément.

Exemple d'implémentation

Considérez l'exemple suivant utilisant le modèle MainWindow de Qt Concepteur :

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)

En employant cette approche, vous peut apporter des modifications à la conception dans Qt Designer sans affecter le code dans logic.py.

Classe de conception Sélection

Le choix de la PyQtClass dépend du modèle de conception choisi :

Template PyQtClass
Main Window QMainWindow
Widget QWidget
Dialog with Buttons Bottom QDialog
Dialog with Buttons Right QDialog
Dialog with Without Buttons QDialog

Fonctionnalités supplémentaires

Cette implémentation permet une implémentation logique avancée au sein de la classe logique, telle que gestion des événements de fermeture de fenêtre. Voici un exemple :

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

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