Maison >développement back-end >Tutoriel Python >Comment empêcher Qt Designer d'écraser le code personnalisé lors des modifications de l'interface utilisateur ?
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ù :
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!