trouver le parent d'un widget dans une multitude de layout
bonjour a tous,
Je poste ce billet car je suis perdu malgré toutes mes recherches je ne trouve pas comment faire. je souhaiterai faire une petite interface de sondage avec une question et un bouton radio a valider ou pas. Mais quand je clique sur le buttonradio je n'arrive pas a trouver le bon parent pour associer l'état a la question.L'interface est simple
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
|
from PyQt5.Qtcore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Test_fenetre(Qwidget):
def __init__(self):
super().__init__()
self.lay_gen=QVBoxLayout(self)
self.traitement_dataset_excel()
self.ui_questionnaire()
self.show()
def traitement_dataset_excel(self):
#ici je récupérè les données d'un fichier excel et je manipule une colonne df['thématique'] et une colonne['question']
#je passe sur la déclaration qui n'apporte rien pour votre compréhension
def etat_checkbox(self):
#Ici je test le certains attributs suite a l'activation d'un checkbox
print (f"parent du checkbox: {self.sender().parent().layout()}") #ça me donne la QVBoxLayout() qui contient le QHBoxLayout qui contient le QCheckBox
print (f"autre parent: {self.sender().parent()}") #ca me donne le QGroupBox contenu dans le QVBoxLayout(self.lay_questionnaire)
def ui_questionnaire(self):
#ici je limite l'itération pour que ce soit plus rapide a comprendre et plus visible.Dans mon interface je pose un QScrollArea pour pouvoir voir toutes les questions classées dans chaque thématique
for index in range(2):
self.lay_questionnaire=QVBoxLayout()
self.group=QGroupBox(str(index))
#Ici aussi je limite litération a 2 questions pour plus de facilité
for indey in range(2):
self.lab=QLabel("question_"+str(indey))
#Je crée un conteneur de QCheckBox pour donner une note(1 à 5) à la question
self.hlay_question=QHBoxLayout()
#Je crée les QCheckBox dynamiquement et normalement selon le nombre de questions que j'ai a poser
for indexy in range(3):
self.note=QCheckBox(str(indexy)):
self.note.clicked.connect(self.etat_checkbox)
self.hlay_question.addWidget(self.note)
#Intégration de la question et du QHBoxLayout de QCheckBox dans le QVBoxLayout
self.lay_questionnaire.addWidget(self.lab)
self.lay_questionnaire.addLayout(self.hlay_question)
#Intégration dans QVBoxLayout général
self.group.setlayout(self.lay_questionnaire)
self.lay_gen.addWidget(self.group)
app=QApllication([])
appli=Test_fenetre()
app.exec_() |
L'idée c'est au fur et a mesure de l'activation d'un checbox, de valoriser un simple fichier txt comme étant une sauvegarde de l'état du questionnaire,au cas ou ça cracherait. Le problème est que je n'arrive pas a récupérer le parent du qcheckbox,ie le QHBoxLayout conteneur, donc je ne peux pas associer la question à un état True/False. J'arrive a récupérer les QHBoxLayout en passant par self.sender().parent().layout().children() qui me donne une liste des QHBoxLayout, mais impossible de facilement récupérer la question,dans un QLabel positionné au dessus, qui est associée au qcheckbox. J'ai l'intuition qu'il y a une méthode builtin pour faire ça mais je n'y arrive pas. Après j'ai réglé le problème avec une usine a gaz où je numérote les questions et les checkbox par setObjectName et ainsi par slicing je me débrouille pour l'association. Ça marche mais c'est totalement inélégant.
J'en appelle à la commu car je suis débutant et que je ne trouve pas la réponse.
Merci pour votre patience et votre aide