Salut,
Je me suis mis à Python y'a peu (depuis le début du mois) pour faire 1 ou 2 petits programmes dont je peux avoir besoin pour le boulot.
Pour le moment je bosse sur le premier programme, un petit utilitaire pour créer un fichier de batch (fichier qui lance des simulations de fluides en mode -nogui )
Jusque là j'ai réussi à bien avancer et à trouver des réponses aux problèmes que j'ai eu, merci Google, mais là je trouve pas (surtout que je sais pas vraiment comment formuler ma recherche).
Comme je ne sais pas à l'avance combien je vais avoir de simulations à lancer j'ai besoin d'une interface "dynamique".
Pour chaque simulation j'ai besoin de quelques paramètres ( chemin du fichier, range si besoin, etc... ), pour ça j'ai donc fait une groupbox dans laquelle se trouve tous les éléments dont j'ai besoin.
J'ai un bouton qui créer une nouvelle groupbox et l'ajoute dans l'interface, jusque là ça marche.
Par contre je voudrais avoir un bouton pour supprimer une groupbox si besoin, le problème c'est que ma groupbox est définie dans un autre fichier .py
La question est comment faire en sorte qu'à chaque fois que je crée ma groupbox, elle et les éléments qu'elle contient soient uniques ( avec un nom unique ) et pour qu'ensuite mon bouton supprime bien la groupbox correspondante ?
J'ai peur que l'explication soit un peu confuse, du coup, et aussi pour travailler sur mon code sans détruite tout ce qui fonctionne, j'ai fait une version simplifiée de mon problème.
Une interface avec un bouton "Add", à chaque fois que je clique sur "Add" je crée un QLineEdit et un bouton "-"
Ce que je voudrais c'est que le bouton "-" supprime le "LineEdit" correspondant, pour le moment j'arrive uniquement à supprimer le dernier créé.
voilà le code des 2 fichiers, sans la fonction delete ( comme je débute le code est très certainement merdique)
Fichier Main.py :
fichier Mon_Module.py ( LineEdit et bouton "-" ):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 # -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui, QtWidgets from Mon_Module import * class Ui_Mon_Interface(object): def setupUi(self, Mon_Interface): Mon_Interface.setObjectName("Mon_Interface") Mon_Interface.setWindowTitle("Test") Mon_Interface.resize(450, 250) self.Layout_Zone = QFormLayout() self.Add_Btn = QtWidgets.QPushButton(Mon_Interface) self.Add_Btn.setObjectName("Add_Btn") self.Add_Btn.setText("Add") self.Widget_Affichage = QtWidgets.QWidget(Mon_Interface) self.Widget_Affichage.setObjectName("Widget_Affichage") self.Widget_Affichage.setGeometry(QtCore.QRect(30,30,250,200)) self.Widget_Affichage.setMaximumSize(250,450) self.Widget_Affichage.setAutoFillBackground(True) self.Widget_Affichage.setLayout(self.Layout_Zone) self.Add_Btn.clicked.connect(self.addMonModule) def addMonModule(self): self.Layout_Zone.addRow(My_Module()) new_widget_size = (self.Widget_Affichage.height()) + 25 self.Widget_Affichage.setGeometry(QtCore.QRect(30,30,250,new_widget_size)) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Mon_Interface = QtWidgets.QDialog() ui = Ui_Mon_Interface() ui.setupUi(Mon_Interface) Mon_Interface.show() sys.exit(app.exec_())
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 # -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * increment = 0 class My_Module(QWidget): def __init__(self, parent = None): super(My_Module, self).__init__(parent) global increment self.lineEdit = QLineEdit() self.lineEdit.setGeometry(QtCore.QRect(40, 70, 320, 25)) self.lineEdit.setObjectName("lineEdit"+str(increment)) self.lineEdit.setText("Bidule "+str(increment)) self.delete_btn = QPushButton() self.delete_btn.setGeometry(QtCore.QRect(0,0,30,25)) self.delete_btn.setMinimumSize(QtCore.QSize(30, 25)) self.delete_btn.setMaximumSize(QtCore.QSize(30, 25)) self.delete_btn.setText("-") increment +=1 layout = QHBoxLayout() layout.addWidget(self.lineEdit) layout.addWidget(self.delete_btn) self.setLayout(layout) print(self.lineEdit.objectName())
En espérant que vous puissiez m'aider
Merci pour vos réponse
Bye
Ben
P.S : Pour info j'utilise Python 3.3 et PyQt 5
Partager