I am trying to zoom in a picture i implemented with QPixmap but nothing works. Here is the way i implemented this. (self.hauteur is a float that represents the height)
self.label.setPixmap(QPixmap(self.image).scaledToHeight(self.hauteur))
I've put my label into a layout in order to put it in a scroll widget then.
self.layout6.addWidget(self.label)
...
self.widget1=QWidget()
self.widget1.setLayout(self.layout6)
self.scroll1.setWidget(self.widget1)
self.tab1.layout.addWidget(self.scroll1,0,1,1,2)
...
self.tab1.setLayout(self.tab1.layout)
How should I do if i want to build a method that zoom in or zoom out the picture in my window by pushing a button ? I've tried to resize the label but it doesn't work.
self.action5=QAction(QIcon("Icon/in"),"Zoom in",self)
self.action5.triggered.connect(self.zoomin)
...
def zoomin(self):
self.hauteur+=100
self.label.scaledToHeight(self.hauteur)
self.update()
I would resize original QPixmap
and put it again in label
self.scale *= 2
size = self.pixmap.size()
scaled_pixmap = self.pixmap.scaled(self.scale * size)
self.label.setPixmap(scaled_pixmap)
Minimal working code:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class MyApp(QWidget):
def __init__(self, *args):
super().__init__(*args)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.button_zoom_in = QPushButton('Zoom IN', self)
self.button_zoom_in.clicked.connect(self.on_zoom_in)
self.layout.addWidget(self.button_zoom_in)
self.button_zoom_out = QPushButton('Zoom OUT', self)
self.button_zoom_out.clicked.connect(self.on_zoom_out)
self.layout.addWidget(self.button_zoom_out)
self.pixmap = QPixmap('image.jpg')
self.label = QLabel(self)
self.label.setPixmap(self.pixmap)
self.layout.addWidget(self.label)
self.scale = 1
self.show()
def on_zoom_in(self, event):
self.scale *= 2
self.resize_image()
def on_zoom_out(self, event):
self.scale /= 2
self.resize_image()
def resize_image(self):
size = self.pixmap.size()
scaled_pixmap = self.pixmap.scaled(self.scale * size)
self.label.setPixmap(scaled_pixmap)
# --- main ---
app = QApplication([])
win = MyApp()
app.exec()
EDIT: The same using self.height += 100
instead of self.scale *= 2
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class MyApp(QWidget):
def __init__(self, *args):
super().__init__(*args)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.button_zoom_in = QPushButton('Zoom IN', self)
self.button_zoom_in.clicked.connect(self.on_zoom_in)
self.layout.addWidget(self.button_zoom_in)
self.button_zoom_out = QPushButton('Zoom OUT', self)
self.button_zoom_out.clicked.connect(self.on_zoom_out)
self.layout.addWidget(self.button_zoom_out)
self.pixmap = QPixmap('image.jpg')
self.height = self.pixmap.height()
self.label = QLabel(self)
self.label.setPixmap(self.pixmap)
self.layout.addWidget(self.label)
self.show()
def on_zoom_in(self, event):
self.height += 100
self.resize_image()
def on_zoom_out(self, event):
self.height -= 100
self.resize_image()
def resize_image(self):
scaled_pixmap = self.pixmap.scaledToHeight(self.height)
self.label.setPixmap(scaled_pixmap)
# --- main ---
app = QApplication([])
win = MyApp()
app.exec()