Bonjour,
j'aimerai savoir comment faire pour mettre une scollbar vertical sur un QWidget.
Merci
Alaninho
Version imprimable
Bonjour,
j'aimerai savoir comment faire pour mettre une scollbar vertical sur un QWidget.
Merci
Alaninho
Dans n'importe quel widget, tu peux ajouter une QScrollBar
Toutefois, si le but recherché est d'avoir une région scrollable dans
une fenêtre par exemple le mieux des d'ajouter à celle ci une
QAbstractScrollArea dans laquelle tu placera les widgets qui t'intéressent.
La méthode setVerticalScrollBar te permettra d'avoir ce que tu cherche.
;)
C'est encore moi,
Il semblerait que QScrollArea soit plus précisément adapté à ce que tu veux
faire.
J'ai été trop vite pour répondre, désolé !
Oui, j'avais regarder, mais je sais pas du tout comment l'utilisé, aurais tu un exmaple? stp
Quelque chose comme ça:
http://img580.imageshack.us/img580/2...categories.png
Uploaded with ImageShack.us[/IMG]
Le code est ici:
http://bazaar.launchpad.net/~vincent.../paqager/files
c'est le fichier 'ui_subCategories.py'
pour le tester, faudra que tu changes la ligne 368
Bon t'auras pas les icônes mais tu peux aussi les remplacer par n'importe quoi.Code:
1
2 ui.setupUi(subCategories, None)
Edit: Le panneau gris est aussi une scrollArea, cliques sur 'Education'.
j'ai réussi a mettre le widget dans le QScrollArea mais mon problème maintenant c'est que le widget ne grandit pas dans l'Area donc mais scrollbar serve rien.
Quand j'appuie sur le bouton +aligt, le widget doit grandir mais la il reste de la même taille dans le QScrollBar.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 from PyQt4.QtGui import * from PyQt4.QtCore import * import msa_input import layout_controller class Multi_msa_input(QWidget): #Create the Main Window input def __init__(self): super(Multi_msa_input, self).__init__() self.tab_msa=[] self.control=layout_controller.Layout_controller(self) self.msa_input=msa_input.Msa_input() self.button_submit=QPushButton('submit', self) self.button_plus=QPushButton('+algt',self) self.layout=QVBoxLayout() self.layout.addWidget(self.msa_input) self.layout.addWidget(self.button_submit) self.layout.addWidget(self.button_plus) self.connect(self.button_plus,SIGNAL('clicked()'), self.plus_msa) self.connect(self.msa_input.button_file,SIGNAL('clicked()'), lambda msa=self.msa_input: self.choose_file(msa)) self.connect(self.msa_input.button_remove, SIGNAL('clicked()'), lambda msa=self.msa_input: self.clear(msa)) self.connect(self.button_submit, SIGNAL('clicked()'), self.submit) self.setWindowTitle('MsaCompare') self.setLayout(self.layout) self.scrollArea=QScrollArea() self.scrollArea.setWidget(self) #self.scrollArea.setMaximumSize(QSize(500,450)) self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) #When you click on the button +aligt, you can to upload or copy/paste a new alignment def plus_msa(self): self.new_msa=msa_input.Msa_input() self.tab_msa.append(self.new_msa) self.layout.addWidget(self.new_msa) self.layout.addWidget(self.button_submit) self.layout.addWidget(self.button_plus) self.connect(self.new_msa.button_file,SIGNAL('clicked()'), lambda msa=self.new_msa: self.choose_file(msa)) self.connect(self.new_msa.button_remove, SIGNAL('clicked()'), lambda msa=self.new_msa: self.clear(msa))
Ben, il semble que ta scrollArea n'est placée nulle part.
Elle n'est pas dans le layout et n'a pas de parent.
Le parent n'est pas obligé mais Qt doit savoir ou placer ce widget.
Dans la fonction plus_msa(self) tu ajoutes de nouveaux widgets dans le Layout définit plus haut mais pas dans la scrollArea, ce me semble.
Le layout est dans le widget et le widget dans le scrollArea donc je ne vois pas pourquoi ajouter le layout dans le ScroolArea. Je ne comprend pas bien.
C'est bon j'ai trouvé, je devais juste faire un adjustSize() sur mon widget.
Merci pour ton aide!.
Alaninho
Ah je n'avait pas vu le self
Mais cela me semble une étrange façon de procéder.
Quid de la notion de parent avec ceci ?
A éviter, cela entraine des confusions.Code:
1
2 self.scrollArea.setWidget(self)
D'autre part je vois que dans la deuxième fonction tu ajoutes les même boutons au même layout. Il suffit d'en créer deux autres pour que cela fonctionne
J'ai enlevé ce est est spécifique à tes fichiers:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class Multi_msa_input(QWidget): #Create the Main Window input def __init__(self): super(Multi_msa_input, self).__init__() self.scrollArea = QScrollArea(self) self.scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.layout = QVBoxLayout(self.scrollArea) self.button_submit = QPushButton('submit', self.scrollArea) self.button_plus = QPushButton('+algt', self.scrollArea) self.layout.addWidget(self.button_submit) self.layout.addWidget(self.button_plus) self.button_plus.clicked.connect(self.plus_msa) self.setWindowTitle('MsaCompare') self.show() #When you click on the button +aligt, you can to upload or copy/paste a new alignment def plus_msa(self): self.button_submit2 = QPushButton('submit2', self.scrollArea) self.button_plus2 = QPushButton('+algt2', self.scrollArea) self.layout.addWidget(self.button_submit2) self.layout.addWidget(self.button_plus2)