Reset le layout d'un onglet avec un bouton
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:
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_()) |