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.
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.
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.
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 |
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!