Bonjour à tous,
Je suis actuellement en train de coder une petite interface PyQt5 en python et je fait face à un problème.
Alors voilà, j'ai un onglet QTabWidget() appelé Advanced Acquisition où, quand je clique sur un bouton, tout le layout disparaît pour en afficher un/des nouveaux à partir d'un classe fille Calibration.
Mon problème est que une fois la calibration terminée j'aimerais cliquer sur un bouton du layout (btnFinish) de la classe Calibration qui pourrais reset l'onglet entier et me réafficher le layout de base.
Vous trouverez ci-dessous des extrait du code.
PS: J'en profite pour faire par d'un autre soucis, il se trouve qu'une fois sur 2 quand je run mon programme python restart le noyau et je dois relancer le run pour que ça marche. Je ne comprends pas à quoi c'est dû.
Merci d'avance.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150 # -*- coding: utf-8 -*- """ Created on Tue Jul 6 16:44:59 2021 @author: johan """ import PyQt5 import sys class AdvancedTab(PyQt5.QtWidgets.QMainWindow): def __init__(self): super().__init__() PyQt5.QtWidgets.QMainWindow.__init__(self) self.setAttribute(PyQt5.QtCore.Qt.WA_DeleteOnClose) self.centralWidget = PyQt5.QtWidgets.QWidget(self) self.setCentralWidget(self.centralWidget) self.content() self.init() def content(self): text = PyQt5.QtWidgets.QLabel("Main UI") text.setFont(PyQt5.QtGui.QFont('Arial',20)) self.calib = PyQt5.QtWidgets.QPushButton('Make a calibration') self.calib.clicked.connect(self.startCalib) self.layout0 = PyQt5.QtWidgets.QHBoxLayout() self.layout0.addWidget(self.calib) self.layout = PyQt5.QtWidgets.QVBoxLayout(self.centralWidget) self.layout.addWidget(text) self.layout.addLayout(self.layout0) def init(self): self.setLayout(self.layout) #Setting layout def startCalib(self): for i in range(self.layout.count()): if self.layout.itemAt(i).layout() is not None : for j in range(self.layout.itemAt(i).count()): self.layout.itemAt(i).itemAt(j).widget().close() else: self.layout.itemAt(i).widget().close() self.calib=Calibration() self.layout.addWidget(self.calib) class Calibration(AdvancedTab): def __init__(self): super().__init__() self.Page1() def Page1(self): self.CloseAll() btnAbandon = PyQt5.QtWidgets.QPushButton("Abandon", self) btnAbandon.clicked.connect(self.buttonFinish) btnNext = PyQt5.QtWidgets.QPushButton("Next", self) btnNext.clicked.connect(self.buttonNext1) self.layout0 = PyQt5.QtWidgets.QHBoxLayout() self.layout0.addWidget(btnAbandon) self.layout0.addWidget(btnNext) self.layout.addLayout(self.layout0) def Page2(self): self.CloseAll() btnAbandon = PyQt5.QtWidgets.QPushButton("Abandon", self) btnAbandon.clicked.connect(self.buttonFinish) btnPrevious = PyQt5.QtWidgets.QPushButton("Previous", self) btnPrevious.clicked.connect(self.buttonPrevious) btnNext = PyQt5.QtWidgets.QPushButton("Next", self) btnNext.clicked.connect(self.buttonNext2) self.layout0 = PyQt5.QtWidgets.QHBoxLayout() self.layout0.addWidget(btnAbandon) self.layout0.addWidget(btnPrevious) self.layout0.addWidget(btnNext) self.layout.addLayout(self.layout0) def Page3(self): self.CloseAll() btnRestart1 = PyQt5.QtWidgets.QPushButton("Restart step 1", self) btnRestart1.clicked.connect(self.buttonRestart1) btnRestart2 = PyQt5.QtWidgets.QPushButton("Restart step 2", self) btnRestart2.clicked.connect(self.buttonRestart2) btnAbandon = PyQt5.QtWidgets.QPushButton("Abandon", self) btnAbandon.clicked.connect(self.buttonFinish) btnFinish = PyQt5.QtWidgets.QPushButton("Finish", self) btnFinish.clicked.connect(self.buttonFinish) self.layout0 = PyQt5.QtWidgets.QHBoxLayout() self.layout0.addWidget(btnRestart1) self.layout0.addWidget(btnRestart2) self.layout1 = PyQt5.QtWidgets.QVBoxLayout() self.layout0.addWidget(btnAbandon) self.layout0.addWidget(btnFinish) self.layout.addLayout(self.layout0) self.layout.addLayout(self.layout1) def CloseAll(self): for i in range(self.layout.count()): if self.layout.itemAt(i).layout() is not None : for j in range(self.layout.itemAt(i).count()): if self.layout.itemAt(i).itemAt(j).layout() is not None : for k in range(self.layout.itemAt(i).itemAt(j).count()): if self.layout.itemAt(i).itemAt(j).itemAt(k).widget() is not None: self.layout.itemAt(i).itemAt(j).itemAt(k).widget().close() elif self.layout.itemAt(i).itemAt(j).widget() is not None: self.layout.itemAt(i).itemAt(j).widget().close() else: self.layout.itemAt(i).widget().close() def buttonNext1(self): self.Page2() def buttonPrevious(self): self.Page1() def buttonNext2(self): self.Page3() def buttonRestart1(self): self.Page1() def buttonRestart2(self): self.Page2() def buttonFinish(self): self.CloseAll() super().__init__() PyQt5.QtWidgets.QMainWindow.update(self) if __name__ == '__main__': app = PyQt5.QtWidgets.QApplication.instance() if not app: app = PyQt5.QtWidgets.QApplication(sys.argv) app.setStyle('Fusion') f = AdvancedTab() f.show() sys.exit(app.exec_())
Partager