纯代码方式编写:
view_image.py
import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import *
class PyQtGraphicDemo(QWidget):
def __init__(self, parent=None):
super(PyQtGraphicDemo, self).__init__(parent)
self.resize(800, 600)
# 显示控件
self.graphicsView = QGraphicsView(self)
# 按钮
self.pushButton = QPushButton(self)
self.pushButton.setText("PushButton")
self.pushButton.clicked.connect(self.showImage)
# 布局
self.verticalLayout = QVBoxLayout(self)
self.verticalLayout.addWidget(self.graphicsView)
self.verticalLayout.addWidget(self.pushButton)
self.setLayout(self.verticalLayout)
def showImage(self):
fileName, filetype = QFileDialog.getOpenFileName(self, "请选择图像:", '.', "Image files (*.bmp *.jpg *.png)")
if fileName != '':
self.pixmap = QPixmap(fileName)
self.pixmapItem = QGraphicsPixmapItem(self.pixmap)
self.scene = QGraphicsScene()
self.scene.addItem(self.pixmapItem)
self.graphicsView.setScene(self.scene)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = PyQtGraphicDemo()
window.show()
sys.exit(app.exec_())
借助Qt creator编辑ui界面:
widget.ui(在Qt creator中编辑)
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGraphicsView" name="graphicsView"/>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>PushButton</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
上述文件可以编译生成python代码如下:
Ui_widget.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'd:\document\VScode_workspace\tree_las\image\widget.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(800, 600)
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setObjectName("verticalLayout")
self.graphicsView = QtWidgets.QGraphicsView(Form)
self.graphicsView.setObjectName("graphicsView")
self.verticalLayout.addWidget(self.graphicsView)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "PushButton"))
main.py
import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import *
from Ui_widget import Ui_Form
class PyQtGraphicDemo(QWidget, Ui_Form):
def __init__(self, parent=None):
super(PyQtGraphicDemo, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.showImage)
def showImage(self):
fileName, filetype = QFileDialog.getOpenFileName(self, "请选择图像:", '.', "Image files (*.bmp *.jpg *.png)")
if fileName != '':
self.pixmap = QPixmap(fileName)
self.pixmapItem = QGraphicsPixmapItem(self.pixmap)
self.scene = QGraphicsScene()
self.scene.addItem(self.pixmapItem)
self.graphicsView.setScene(self.scene)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = PyQtGraphicDemo()
window.show()
sys.exit(app.exec_())