在QGraphicsView中使用addPixmap时,如何放大QPixmap图片?
如何在QGraphicsView中放大PNG图片的显示尺寸
嗨,针对你的问题,我整理了几种简单有效的方法来放大你添加的PNG图片,结合你的现有代码来看:
方法1:加载图片时直接缩放QPixmap
你可以在加载QPixmap的阶段,调用scaled()方法直接调整图片尺寸,这样添加到场景的就是已经放大后的图片了。这种方法适合需要固定图片大小的场景,还能保持图片的宽高比:
class MyGraphicsView(QGraphicsView): def __init__(self): super(MyGraphicsView, self).__init__() scene = QGraphicsScene(self) self.tic_tac_toe = TicTacToe() scene.addItem(self.tic_tac_toe) # 加载图片并缩放:设置目标尺寸,保持宽高比+平滑缩放避免锯齿 self.m = QPixmap("exit.png").scaled( 200, 200, Qt.KeepAspectRatio, Qt.SmoothTransformation ) scene.addPixmap(self.m) self.setScene(scene) self.setCacheMode(QGraphicsView.CacheBackground) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
如果想按比例放大(比如放大2倍),可以直接基于原图片尺寸计算:
self.m = QPixmap("exit.png").scaled( self.m.size() * 2, Qt.KeepAspectRatio, Qt.SmoothTransformation )
方法2:通过QGraphicsPixmapItem设置缩放比例
这种方法不需要修改原QPixmap,而是对场景中的图片项单独缩放,灵活性更高——你甚至可以后续通过按钮、鼠标滚轮等交互动态调整缩放比例:
class MyGraphicsView(QGraphicsView): def __init__(self): super(MyGraphicsView, self).__init__() scene = QGraphicsScene(self) self.tic_tac_toe = TicTacToe() scene.addItem(self.tic_tac_toe) self.m = QPixmap("exit.png") # 保存添加到场景后的图片项对象 self.pixmap_item = scene.addPixmap(self.m) # 设置缩放比例:2.0表示放大两倍,小于1则是缩小 self.pixmap_item.setScale(2.0) self.setScene(scene) self.setCacheMode(QGraphicsView.CacheBackground) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
如果需要非等比例缩放(比如x方向放大2倍,y方向放大3倍),可以用setTransform():
self.pixmap_item.setTransform(QTransform().scale(2, 3))
方法3:调整QGraphicsView的整体缩放(可选)
如果你希望整个场景(包括井字棋和图片)都被缩放,可以调用QGraphicsView的scale()方法,但这会影响场景内的所有元素:
# 在初始化代码末尾添加:整体放大1.5倍 self.scale(1.5, 1.5)
根据你的实际需求选对应的方法就好啦~
内容的提问来源于stack exchange,提问作者Aquarius_Girl
相关产品推荐
相关产品推荐

