Bonjour à toutes et à tous,
Ca fait plusieurs mois que je je reviens sans cesse sur un script où j'ai besoin d'envoyer une commande au resize d'un splitter.
J'ai jamais réussit à bien chopper les notions malgré avoir relu et relu pas mal de tutos sur le net.
Du coup je viens de rafraîchir toute mes connaissances sur PyQt en recommençant dès le début et je me fais des petits fichiers tests pour tenter de comprendre ce que je n'avais pas comprit jusqu'à là.
En gros, de ce que j'ai comprit du resizeEvent, c'est qu'il s'applique sur une classe, donc si je veux faire un resize d'un splitter je suis obligé de le faire dans une classe à part, je me goure peut-être mais c'est la seule méthode que j'ai trouvé.
Dans un premier fichier j'ai un widget dans une classe avec une fonction de resizeEvent.
Dans un autre autre fichier j'ai mon interface globale, et je viens importer le widget de mon fichier séparer dans un splitter. Le problème c'est dès que j'importe directement la classe, le resize fonctionne mais l'interface n'affiche rien, si j'importe la fonction qui contient l'interface, l'interface fonctionne mais pas le resize.
Ce que je n'arrive pas à faire quand j'utilise la classe, c'est un return du nom du widget, afin de l'ajouter au splitter (car le __init__ ne peut retourner qu'un None).
Je suis persuadé de ne pas être très compréhensible donc voici mon code pour je l'espère plus de clarté :
main.py
widgetToResize.py
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 from PyQt4 import QtGui, QtCore import widgetToResize class mainWindow(QtGui.QWidget): def __init__(self): super(mainWindow, self).__init__() self.setupUi() def setupUi(self): self.layout = QtGui.QVBoxLayout(self) self.splitLayout = QtGui.QSplitter(QtCore.Qt.Horizontal, self) self.splitLayout.setHandleWidth(20) self.layout.addWidget(self.splitLayout) self.btn_leftSplit = QtGui.QPushButton('Left') self.splitLayout.addWidget(self.btn_leftSplit) #Dans le cas ou l'interface fonctionne : createWidget = widgetToResize.createWidget() self.rightSplit = createWidget.panel() #Dans le cas ou le resize fonctionne (retourne un None): #self.rightSplit = widgetToResize.createWidget() self.splitLayout.addWidget(self.rightSplit) app = QtGui.QApplication([]) window = mainWindow() window.resize(1000,500) window.show() app.exec_()
Donc si jamais quelqu'un m'a comprit, je m'en remet à cette personne !
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 from PyQt4 import QtGui, QtCore class createWidget(QtGui.QWidget): def __init__(self): super(createWidget, self).__init__() self.panel() def panel(self): self.rightSplit = QtGui.QPushButton("Right") return self.rightSplit def resizeEvent(self, event): w = createWidget.size(self).width() h = createWidget.size(self).height() print('{0}*{1}'.format(h,w))
Merci !
EDIT : Avant de poster sur le forum j'ai passer mon script de PySide à PyQt, je viens de rester et il semblerait que les QSize de PyQt ne possèdent pas de méthode toTuple() du coup j'ai corrigé ça en séparant la largeur et la hauteur.
Partager