Pyqt5的QGraphicsView的使用-选择图片,显示在GUI中

标签: python  pyqt  gui

一、想实现的目标

想设计一个GUI,从文件管理器中选择图片,然后将图片显示在QGraphicsView中
在这里插入图片描述
点击上述的选择文件,于是就是让自己去选择图片文件

二、逻辑代码的实现

逻辑代码是在pycharm里面进行编写

import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem
from PyQt5.QtGui import QPixmap, QImage
from photo_view import Ui_Photo_view
from PIL import Image
import cv2


class show_photo(QMainWindow):
	def __init__(self):
		super(show_photo,self).__init__()
		self.ui =Ui_Photo_view()
		self.ui.setupUi(self)
		self.view = QGraphicsView(self)
		self.view.setGeometry(0,0,710,650)
		
	def select_button_clicked(self):
		file_name = QFileDialog.getOpenFileName(self, "Open File", "./", "jpg (*.jpg)")
		image_path = file_name[0]
		if (file_name[0] == ""):
			QMessageBox.information(self, "提示", self.tr("没有选择图片文件!"))
		print(image_path)
		img = cv2.imread(image_path)  # 读取图像
		img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转换图像通道
		x = img.shape[1]  # 获取图像大小
		y = img.shape[0]
		self.zoomscale = 1  # 图片放缩尺度
		frame = QImage(img, x, y, QImage.Format_RGB888)
		pix = QPixmap.fromImage(frame)
		self.item = QGraphicsPixmapItem(pix)  # 创建像素图元
		self.scene = QGraphicsScene()  # 创建场景
		self.scene.addItem(self.item)
		self.view.setScene(self.scene)
		self.view.show()
		
if __name__ == "__main__":
	app = QApplication(sys.argv)
	mainWindow = show_photo()
	mainWindow.show()
	sys.exit(app.exec_())


三、界面代码的实现

界面代码是在Qt designer里面直接拖拽的,产生的ui文件,然后转的py文件

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\Projects\photo_view/photo_view.ui'
#
# Created by: PyQt5 UI code generator 5.12.3
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Photo_view(object):
    def setupUi(self, Photo_view):
        Photo_view.setObjectName("Photo_view")
        Photo_view.resize(890, 682)
        self.centralwidget = QtWidgets.QWidget(Photo_view)
        self.centralwidget.setObjectName("centralwidget")
        self.select_button = QtWidgets.QPushButton(self.centralwidget)
        self.select_button.setGeometry(QtCore.QRect(770, 140, 75, 23))
        self.select_button.setCheckable(True)
        self.select_button.setObjectName("select_button")
        self.pic_show = QtWidgets.QGraphicsView(self.centralwidget)
        self.pic_show.setGeometry(QtCore.QRect(0, 0, 711, 641))
        self.pic_show.setObjectName("pic_show")
        Photo_view.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Photo_view)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 890, 23))
        self.menubar.setObjectName("menubar")
        Photo_view.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Photo_view)
        self.statusbar.setObjectName("statusbar")
        Photo_view.setStatusBar(self.statusbar)

        self.retranslateUi(Photo_view)
        self.select_button.clicked.connect(Photo_view.select_button_clicked)
        QtCore.QMetaObject.connectSlotsByName(Photo_view)

    def retranslateUi(self, Photo_view):
        _translate = QtCore.QCoreApplication.translate
        Photo_view.setWindowTitle(_translate("Photo_view", "MainWindow"))
        self.select_button.setText(_translate("Photo_view", "选择文件"))

四、遇到的问题

在这里插入图片描述
如图所示,显示的图片是在一个新的窗口显示的。围绕这个遇到的问题,我想解决掉它。我在QT的论坛求救了,一个好心人回复了是说差父类。修改成self.view = QGraphicsView(self)
,新的窗口就在左上角一点点的位置。怎么办呢。。
然后再加一个坐标,就能在里面显示了。嘿嘿。

五、接下来怎么做

只能继续学习。。Fire on the hole.

版权声明:本文为ActonMartin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ActonMartin/article/details/104017794

智能推荐

浅谈pyqt5在QMainWindow中布局的问题

今天小编就为大家分享一篇浅谈pyqt5在QMainWindow中布局的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 引言: 在pyqt5中使用了父类为QMainWindow的话,在里面使用布局类,QGridLayout, QHBoxLayout ,QVBoxLayout 时,发现不好用。 解决: 如果是在以QWidget为父类的自定义类中使用这三个布局类的话,是很好用的,但...

matplotlib在pyqt5中的集成

文章目录 一份pyqt5集成mpl示例 matplotlib画图详解 应用:当前k线绘制 一些问题 一份pyqt5集成mpl示例 从一份来自stackoverflow的demo开始: 从代码中可以看出, 这都是依托于matplotlib后端对qt5的支持 需要先声明常规matplotlib的figure 以figure为参数绑定声明canvas, 其可以作为组件被安排在QVBoxLayout()中...

PyQt5在QMainWindow中的嵌套布局

1.直接上代码 代码如下(示例): 运行结果 总结 要在QMainWindow中实现嵌套布局主要是在self.setCentralWidget(widget)中设置一个中心控件 ,将widget设置为全局布局...

css3画圆和椭圆

试一下就知道怎么用了,  画个多来A梦 是用多简单...

猜你喜欢

raw&assets&sdcard读取mp3文件的方式

Raw方式 assets SDcard 首先需要添加 静态请求权限 动态请求 playMnt的播放方法 如何在模拟器中添加音乐 详细代码参见 点击跳转...

微信小程序封装请求方法wx.request(OBJECT)

小程序写完也一段时间了,最近分享下装逼的技能吧,封装请求方法,不但高大上,而且使用简单。先说说小程序自带的请求吧! wx.request(OBJECT) 参数: 参数名 类型 必填 默认值 说明 url String 是 开发者服务器接口地址 data Object/String/ArrayBuffer 否 请求的参数 header Object 否 设置请求的 header,header 中不能...

【并行计算-CUDA开发】【视频开发】ffmpeg Nvidia硬件加速总结

2017年5月25日 0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用。Video Codec SDK包含完整的的高性能工具、源码及文档,支持,可以运行在Windows和Linux系统之上。从软件上来说,SDK包含两类硬件加速接口,用于编码加速的NVENCODE API和用于解码加速的NVDECODE API(之前被...

HTML简介及部分常用标签

一、HTML简介 1)HTML简介 HTML是⽤于创建⽹⻚的语⾔。我们通过使⽤HTML标记标签创建html⽂档来创建⽹⻚。 HTML代表超⽂ 本标记语⾔。 HTML是⼀种标记语⾔,它具有标记标签的集合。 HTML标签是由尖括号括起来的词,如 , 。标签通常成对出现,例如 和 。 ⼀对中的第⼀个标签是开始标签;第⼆个标签是结束标签。在上⾯的示例中, 是开始标签,⽽ 是结束标签。 我们还可以将开始标签...

05:最大值和最小值的差

原题链接 总时间限制:  1000ms  内存限制:  65536kB 描述 输出一个整数序列中最大的数和最小的数的差。 输入 第一行为M,表示整数个数,整数个数不会大于10000; 第二行为M个整数,以空格隔开,每个整数的绝对值不会大于10000。 输出 输出M个数中最大值和最小值的差。 样例输入 样例输出 源码...