[newbie] Problème de dimension d'une fenêtre affichant une image
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:
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_()) |
repérer les coordonnées sur l'image
Super, merci.
QGraphicsView est le widget de la situation !
Par contre une chose que je n'ai toujours pas résolu : Le QPixmap ne remplit pas toujours totalement le QGraphicsView, ce qui est peu pratique pour repérer les coordonnées sur l'image.
Comment je peux régler cela ?