一、在图形界面显示图片的两种方法
一般情况下,想要在GUI中显示图片,我们会通过:
– 实例化一个QLable()部件;
– 实例化一个QPixmap()图形类;
– 通过QLabel()部件的setPixmap()方法设置QLabel()部件的图形;
就像如下代码所示:
# coding:utf-8
from PyQt5 import QtGui,QtWidgets
import sys
class MainUi(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle("动画使用-zmister.com") # 设置窗口标题
self.resize(400,200) # 规定窗口大小
self.main_widget = QtWidgets.QWidget() # 创建一个widget部件
self.label = QtWidgets.QLabel(self.main_widget) # 创建一个文本标签部件
png = QtGui.QPixmap() # 创建一个绘图类
png.load("logo.png") # 从pngz中加载一个图片
self.label.setPixmap(png) # 设置文本标签的图形
self.setCentralWidget(self.main_widget)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
gui = MainUi()
gui.show()
sys.exit(app.exec_())
但是这种方法没有办法实现对图片更多的控制。为了更好地对图形界面中的图片进行控制和管理,我们还需要使用到其他的类,比如QtWidgets中的QGraphicsScene类,QGraphicsScene提供了一个场景,用于对2D图形进行管理。同时,为了展示QGraphicsScene中的内容,我们还需要使用到QtWidgets中的QGraphicsView类来提供一个视图部件。
下面,我们就通过一个简单的例子来了解一下QGraphicsScene类和QGraphicsView类的使用。
首先是完整的代码,如下所示:
# coding:utf-8
from PyQt5 import QtGui,QtWidgets,QtCore
import sys
class MainUi(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle("动画使用-zmister.com") # 设置窗口标题
self.resize(400,200) # 规定窗口大小
self.main_widget = QtWidgets.QWidget() # 创建一个widget部件
self.grapview = QtWidgets.QGraphicsView(self.main_widget) # 创建一个图形视图,继承自main_widget
self.grapview.setGeometry(QtCore.QRect(10, 10, 380, 180)) # 设置图形视图的矩形区域
self.scene = QtWidgets.QGraphicsScene() # 创建一个图形管理场景
self.grapview.setScene(self.scene)
png = QtGui.QPixmap() # 创建一个绘图类
png.load("logo.png") # 从png中加载一个图片
item = QtWidgets.QGraphicsPixmapItem(png) #
self.scene.addItem(item)
self.setCentralWidget(self.main_widget)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
gui = MainUi()
gui.show()
sys.exit(app.exec_())
在这里面,基础的窗口代码与之前的代码类似,有区别且最核心的为以下几行代码。
首先,我们实例化创建了一个用于展示图形场景的图形视图QGraphicsView(),将它继承自self.main_widget主窗口部件:
self.grapview = QtWidgets.QGraphicsView(self.main_widget)
然后,我们实例化创建了一个图形场景管理类QGraphicsScene(),并通过setScene()方法将图形视图s