Bonjour,
nouveau sur PyQt, j'ai besoin d'une librairie graphique pour un projet dans lequel je dois récupérer les coordonnées de lignes dessinées par dessus une image par l'utilisateur, coordonnées relatives à la position sur l'image (c'est un projet de géométrie projective pour ceux que ça intéresse).
L'utilisateur peut aussi choisir l'image d'arrière plan qui peut avoir des dimensions différentes à tout moment.
Pour le moment j'ai créé une classe QWidget qui contient un QLabel auquel j'ai assigné un objet QPixmap, la fenêtre principale contient une toolbar avec un bouton pour lancer un une fenêtre de dialogue permettant de charger une image dans le label du widget.
Le truc c'est que si je charge une grande image puis une plus petite, la fenêtre reste grande (même trop si les dimensions de l'image dépasse celle de l'écran, et le label n'est pas redimensionné, je m'en suis apperçu en via l'évênement mousepress capté par le widget.
Comme c'est un projet à faire assez rapidement et que je n'ai pas connaissance de toute la librairie PyQt je me permet de faire appel à vos conseil pour l'implémentation d'un tel programme.
Merci.
Edi: Une chose que je n'explique pas c'est que si je fait remplace le QWidget par une extension de QLabel directement, j'ai resize() le QLabel aux dimension de size() du QPixmap, en affichant la taille du QLabel je vois que celle-ci change bien, pourtant lorsque je clique partout dans la fenêtre l'évênement mousepressed du QLabel se déclenche, même dans des zones à priori hors du QLabel redimensionné....
Voici le code en question :
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 class DrawLabel(QLabel): def __init__(self, img="img/tux.png"): super().__init__() self.initUI(img) def initUI(self, img): # Image label initialization self.pixmap = QPixmap(img) self.setPixmap(self.pixmap) self.onLine = False def setImg(self, img): self.pixmap = QPixmap(img) #self.resize(self.pixmap.size()) self.setPixmap(self.pixmap) #self.resize(self.sizeHint()) print("DIMENSION: ", self.pixmap.size()) print("LABEL SIZE: ", self.size()) def mousePressEvent(self, event): self.onLine = not self.onLine self.lineOrigin = QCursor.pos() print(self.lineOrigin) class App(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): # toolbar initialization exitAction = QAction(QIcon('exit24.png'), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.triggered.connect(qApp.quit) self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(exitAction) loadimgAction = QAction(QIcon('img/loadimg.png'), 'Load Picture', self) loadimgAction.setShortcut('Ctrl+L') loadimgAction.triggered.connect(self.loadImg) self.toolbar = self.addToolBar('Load picture') self.toolbar.addAction(loadimgAction) self.drawlbl = DrawLabel() self.setCentralWidget(self.drawlbl) # Window initialization self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Progeo') self.show() def loadImg(self): filename, _ = QFileDialog.getOpenFileName(self, 'Load image file', '.', "Images (*.png *.xpm *.jpg)") self.drawlbl.setImg(filename) self.resize(self.sizeHint()) if __name__ == '__main__': app = QApplication(sys.argv) ex = App() sys.exit(app.exec_())
Partager