QGraphicsView 显示图片

这篇具有很好参考价值的文章主要介绍了QGraphicsView 显示图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

QGraphicsView 显示图片

QGraphicsView 是 PyQt6 里负责显示图形的组件,搭配 QGraphicsScene 和 QtGui.QPixmap() 就可以显示图片,这篇教学会介绍如何在 PyQt6 窗口里加入 QGraphicsView 组件并显示图片。

快速预览:

  • QGraphicsView 显示图片

  • 改变图片尺寸

  • 设定图片位置

  • 显示多张图片

QGraphicsView 显示图片

建立 PyQt6 窗口物件后,透过 QtWidgets.QGraphicsView(widget)方法,就能在指定的组件中建立显示图形组件,QGraphicsView 建立后,需再使用 QtWidgets.QGraphicsScene()建立场景组件,再透过QtGui.QPixmap()于场景中加入图片,最后将场景加入 QGraphicsView 就可以显示图片,如果场景大小超过显示区域,会自动出现卷轴。

 from PyQt6 import QtWidgets, QtGui
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 300)
 ​
 grview = QtWidgets.QGraphicsView(Form)  # 加入 QGraphicsView
 grview.setGeometry(20, 20, 260, 200)    # 设定 QGraphicsView 位置与大小
 scene = QtWidgets.QGraphicsScene()      # 加入 QGraphicsScene
 scene.setSceneRect(0, 0, 300, 400)      # 设定 QGraphicsScene 位置与大小
 img = QtGui.QPixmap('mona.jpg')         # 加入图片
 scene.addPixmap(img)                    # 將图片加入 scene
 grview.setScene(scene)                  # 设定 QGraphicsView 的场景為 scene
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets, QtGui
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 300)
         self.ui()
 ​
     def ui(self):
         self.grview = QtWidgets.QGraphicsView(self)  # 加入 QGraphicsView
         self.grview.setGeometry(20, 20, 260, 200)    # 设定 QGraphicsView 位置与大小
         scene = QtWidgets.QGraphicsScene()           # 加入 QGraphicsScene
         scene.setSceneRect(0, 0, 300, 400)           # 设定 QGraphicsScene 位置与大小
         img = QtGui.QPixmap('mona.jpg')              # 加入图片
         scene.addPixmap(img)                         # 將图片加入 scene
         self.grview.setScene(scene)                  # 设定 QGraphicsView 的场景為 scene
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QGraphicsView 显示图片

改变图片尺寸

使用 QtGui.QPixmap() 建立图片后,就能透过scaled(w, h)方法调整图片大小,下方的程序执行后,会显示缩小后的图片。

 from PyQt6 import QtWidgets, QtGui
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 300)                    # 窗口大小
 ​
 grview = QtWidgets.QGraphicsView(Form)
 grview.setGeometry(20, 20, 260, 200)     # QGraphicsView 位置 (20, 20) 和大小 260x200
 scene = QtWidgets.QGraphicsScene()
 scene.setSceneRect(0, 0, 120, 160)       # QGraphicsScene 相對位置 (20, 20) 和大小 120x160
 img = QtGui.QPixmap('mona.jpg')
 img = img.scaled(120,160)                # 调整图片大小為 120x160
 scene.addPixmap(img)
 grview.setScene(scene)
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets, QtGui
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 300)
         self.ui()
 ​
     def ui(self):
         self.grview = QtWidgets.QGraphicsView(self)
         self.grview.setGeometry(20, 20, 260, 200)  # QGraphicsView 位置 (20, 20) 和大小 260x200
         scene = QtWidgets.QGraphicsScene()
         scene.setSceneRect(0, 0, 120, 160)         # QGraphicsScene 相對位置 (20, 20) 和大小 120x160
         img = QtGui.QPixmap('mona.jpg')
         img = img.scaled(120,160)                  # 调整图片大小為 120x160
         scene.addPixmap(img)
         self.grview.setScene(scene)
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QGraphicsView 显示图片

设定图片位置

因为使用 setSceneRect 时定位是以「中心点」为主,如果要改成熟悉的「左上角」定位,可透过简单的数学公式换算,下方的程序执行后,会将定位点改成左上角,修改 x 和 y 的数值,就可以控制图片左上角的坐标。

 from PyQt6 import QtWidgets, QtGui
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 300)
 ​
 grview = QtWidgets.QGraphicsView(Form)
 gw = 260
 gh = 200
 grview.setGeometry(20, 20, gw, gh)    # QGraphicsView 的長寬改成變數
 scene = QtWidgets.QGraphicsScene()
 img = QtGui.QPixmap('mona.jpg')
 img_w = 120                           # 顯示图片的寬度
 img_h = 160                           # 顯示图片的高度
 img = img.scaled(img_w, img_h)
 x = 20                                # 左上角 x 座標
 y = 20                                # 左上角 y 座標
 dx = int((gw - img_w) / 2) - x        # 修正公式
 dy = int((gh - img_h) / 2) - y
 scene.setSceneRect(dx, dy, img_w, img_h)
 scene.addPixmap(img)
 grview.setScene(scene)
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets, QtGui
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 300)
         self.ui()
 ​
     def ui(self):
         self.grview = QtWidgets.QGraphicsView(self)
         gw = 260
         gh = 200
         self.grview.setGeometry(20, 20, gw, gh)    # QGraphicsView 的長寬改成變數
         scene = QtWidgets.QGraphicsScene()
         img = QtGui.QPixmap('mona.jpg')
         img_w = 120                           # 顯示图片的寬度
         img_h = 160                           # 顯示图片的高度
         img = img.scaled(img_w, img_h)
         x = 20                                # 左上角 x 座標
         y = 20                                # 左上角 y 座標
         dx = int((gw - img_w) / 2) - x        # 修正公式
         dy = int((gh - img_h) / 2) - y
         scene.setSceneRect(dx, dy, img_w, img_h)
         scene.addPixmap(img)
         self.grview.setScene(scene)
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QGraphicsView 显示图片

显示多张图片

如果要加入多张图片,就要使用 QItem 的做法,下方的程序执行后,会在场景里放入两个图片尺寸不同的 QItem。

 from PyQt6 import QtWidgets, QtGui
 import sys
 ​
 app = QtWidgets.QApplication(sys.argv)
 MainWindow = QtWidgets.QMainWindow()
 MainWindow.setObjectName("MainWindow")
 MainWindow.setWindowTitle("千牛编程思维")
 MainWindow.resize(300, 300)
 ​
 grview = QtWidgets.QGraphicsView(MainWindow)  # 加入 QGraphicsView
 grview.setGeometry(0, 0, 300, 300)            # 设定 QGraphicsView 位置与大小
 scene = QtWidgets.QGraphicsScene()            # 加入 QGraphicsScene
 scene.setSceneRect(0, 0, 200, 200)            # 设定 QGraphicsScene 位置与大小
 img = QtGui.QPixmap('mona.jpg')               # 建立图片
 img1 = img.scaled(200,50)                     # 建立不同尺寸图片
 qitem1 = QtWidgets.QGraphicsPixmapItem(img1)  # 设定 QItem,內容是 img1
 img2 = img.scaled(100,150)                    # 建立不同尺寸图片
 qitem2 = QtWidgets.QGraphicsPixmapItem(img2)  # 设定 QItem,內容是 img2
 scene.addItem(qitem1)                         # 场景中加入 QItem
 scene.addItem(qitem2)                         # 场景中加入 QItem
 grview.setScene(scene)                        # 设定 QGraphicsView 的场景為 scene
 ​
 MainWindow.show()
 sys.exit(app.exec())

class 写法:文章来源地址https://www.toymoban.com/news/detail-424373.html

 from PyQt6 import QtWidgets, QtGui
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 300)
         self.ui()
 ​
     def ui(self):
         self.grview = QtWidgets.QGraphicsView(self)   # 加入 QGraphicsView
         self.grview.setGeometry(0, 0, 300, 300)       # 设定 QGraphicsView 位置与大小
         scene = QtWidgets.QGraphicsScene()            # 加入 QGraphicsScene
         scene.setSceneRect(0, 0, 200, 200)            # 设定 QGraphicsScene 位置与大小
         img = QtGui.QPixmap('mona.jpg')               # 建立图片
         img1 = img.scaled(200,50)                     # 建立不同尺寸图片
         qitem1 = QtWidgets.QGraphicsPixmapItem(img1)  # 设定 QItem,內容是 img1
         img2 = img.scaled(100,150)                    # 建立不同尺寸图片
         qitem2 = QtWidgets.QGraphicsPixmapItem(img2)  # 设定 QItem,內容是 img2
         scene.addItem(qitem1)                         # 场景中加入 QItem
         scene.addItem(qitem2)                         # 场景中加入 QItem
         self.grview.setScene(scene)                  # 设定 QGraphicsView 的场景為 scene
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

到了这里,关于QGraphicsView 显示图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Plt图片不显示,不弹出,Pycharm图片独立显示与imshow()无法显示

    问题一:Pycharm 图片在独立窗口显示(或者是图片压根不显示) pycharm从2017.3版之后,将 matplotlib 的绘图的结果默认显示在 SciView 窗口中, 而不是弹出独立的窗口。可以通过如下方式修改,弹出独立窗口 File | Settings | Tools | Python Scientific | Show plots in tool window 取消勾选 问题二:py

    2024年02月13日
    浏览(70)
  • flutter开发实战-显示本地图片网络图片及缓存目录图片

    flutter开发实战-显示本地图片网络图片及缓存目录图片 在最近开发中碰到了需要显示缓存目录图片,这里顺便整理一下,显示本地图片、网络图片、缓存目录图片的方法。 1 在项目根目录下创建名为 images文件夹,也可以将images放在asserts文件夹下 2.在pubspec.yaml中配置images相关

    2024年02月14日
    浏览(37)
  • 一看就会;vue实现图片上传回显及修改(element-ui限制一张图片上传,没有图片显示+号,有图片显示图片隐藏+号)

    1.单独封装element-UI的upload文件上传组件; 2.组件完成上传、回显、修改功能; 3.没有图片时,显示上传的+号,有图片时隐藏上传的+号;   父组件:  代码:

    2024年02月15日
    浏览(35)
  • nginx解决图片显示过慢,或者不显示

    问题定位 经过一系列的排查(中间过程我就省略了,直接写重点了!),最终定位到是Nginx的问题。当我打开这位读者的网站后台管理系统,发现图片显示非常慢,在Nginx前端代理上查出如下错误信息。 直接在后台服务器上用后台服务器的IP地址去访问,发现速度相当快,于

    2024年02月04日
    浏览(49)
  • Element Ui中图片预览功能,点击当前图片显示当前图片。

    #应用场景# 1.页面显示出现多张图片时,需要点击查看预览 2.需要点击当前图片就显示当前图片,点击下一张上一张功能不受影响 #实现思路# 1.使用Element Ui中的图片预览API previewSrcList,可以显示点击预览效果,但是无法做到实时根据当前点击的图片显示预览当前的图片 2.解决方

    2024年04月22日
    浏览(35)
  • Qt中QGraphicsView总体架构学习

    前段时间学习了下如何在QGraphicsView架构中绘制刻度尺,主要是与OnPainter中进行比较的,那么今天就来详细讲解下我对QGraphicsView框架的认知吧~ 最近一段时间想学习下,如果我有不正确的,欢迎留言探讨哟~ 使用过OnPainter绘制过图形的,QPainter绘制需要在绘制设备的paintEvent()事

    2024年02月02日
    浏览(36)
  • QGraphicsView 实例3地图浏览器

    主要介绍Graphics View框架,实现地图的浏览、放大、缩小,以及显示各个位置的视图、场景和地图坐标 效果图:  mapwidget.h  mapwidget.cpp

    2024年02月12日
    浏览(36)
  • QGraphicsView 如何让图形大小适配窗口

    setSceneRect是一个Qt中的函数,用于设置QGraphicsView中的场景矩形(QRectF)。 QGraphicsView是一个用于显示和编辑图形场景的控件,而setSceneRect函数用于设置场景矩形,即指定场景的可视区域的大小和位置。具体来说,它的作用有以下几个方面: 定义场景的大小:通过设置场景矩形

    2024年01月24日
    浏览(33)
  • QGraphicsView通过鼠标操作来绘制图元

    在Visio和MindManager等类似的图元操作软件中,很多时候我们会通过鼠标操作来添加自定义的图元。这里就介绍一下如何在QT的图形视图框架中通过鼠标绘制来添加图元。 在实现的时候我们先添加一个自定义图元用来响应鼠标操作,自定义图元的实现如下所示. 辅助图元类似于标

    2024年02月13日
    浏览(49)
  • Flutter长图显示,自定义显示图片的指定区域

    话不多说,直切正题!我们经常会遇到一个需求,在在一个定高的卡片中显示长图,如下图所示。 假如我们要显示这个长图。如果不考虑自定义显示长图的区域,这个很好实现,没什么可说的。 关于 BoxFit 这个枚举,各个具体的枚举值含义,我直接从官方的注释中复制了出来

    2024年02月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包