我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构下去进行程序设计
如果还不清楚我程序设计的逻辑 (UI.py、controller.py、start.py 分别在干麻)
建议先阅读 day5 文章後再来阅读此文。
https://www.wongwonggoods.com/python/pyqt5-5/
https://github.com/howarder3/ironman2021_PyQt5_photoshop/tree/main/day11_display_image
我们在先前的文章中已经有提过,我们可以使用 Qlabel 作为显示文字,
同样的,我们也可以使用 Qlabel 来显示图片。
今天我们就要来实作这个功能。
我们先点击 QMainWindow 的部份,
展开 geometry,这里修改 Width, Height 可以直接改变整个视窗的大小。
建议修改要大一点,因为要显示的图片可能也会很大。
我们使用与之前一样的方式新增一个 Qlabel,文字可以先不用管他,
但我们需要先改变 Qlabel 所占的范围大小,
展开 geometry,这里修改 Width, Height 可以直接改变 Qlabel 显示视窗的大小。
而上面的 X, Y 可以个人需求修改,X, Y 表示的是「相对 MainWindow」此 Label 开始显示的位置。
(从左上角开始算,往右X、往下Y)
这边有两件事情要注意:
- 修改後的
Qlabel geometry
必须小於主程序的 QMainWindow` (画面比视窗大不合理吧XD)如果 Qlabel geometry 设定的解析度不够大,有可能会只有只显示部份图片的情形
(从左上开始自动剪裁)
读者们可以开始自行设计自己的介面罗,以上为我的示范。
一样的编译指令,我们加上 -x (也可不加),
我们就可以先检视看看转换後的视窗是不是跟我们想像的一样。
pyuic5 -x day11.ui -o UI.py
一样,这程序只有介面 (视觉上的呈现),没有任何互动功能
python UI.py
这边可以看到很单纯的只有一段被初始化的文字,
接下来我们要开始去改变里面的内容。
这次我们只有一个物件 self.label
还记得我们在 day5 中的模板吗?这边我们直接复制过来使用并修改。
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtGui import QImage, QPixmap
import cv2
from UI import Ui_MainWindow
class MainWindow_controller(QtWidgets.QMainWindow):
def __init__(self):
super().__init__() # in python3, super(Class, self).xxx = super().xxx
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setup_control()
def setup_control(self):
# TODO
self.img_path = 'cat_small.jpg'
self.display_img()
def display_img(self):
self.img = cv2.imread(self.img_path)
height, width, channel = self.img.shape
bytesPerline = 3 * width
self.qimg = QImage(self.img, width, height, bytesPerline, QImage.Format_RGB888).rgbSwapped()
self.ui.label.setPixmap(QPixmap.fromImage(self.qimg))
照我们 day5 的程序架构,我们执行
python start.py
就会像下图这样,因为图片太大了,800*600 只能显示部份图片
★ 本文也同步发於我的个人网站(会有内容目录与显示各个小节,阅读起来更流畅):【PyQt5】Day 11 - 以 Qlabel 在 PyQt 中显示图片 (基於 QImage 使用 OpenCV)
今天开始,我们要进入一个新的主题「Adaptation」。这是指在预训练模型和Fine-tune之间...
前言 我们紧接着切入 RNN 为架构的编码器-解码器。 在seq2seq之前 RNN Encoder...
Kamusta,我是Charlie! 在Day14中,我们完成了前端的购物车商品显示跟加入购物车,而...
JAVA - Windows 10 安装 Maven 参考资料 参考:(一)maven 新手教学: ...
线性布局 不管是水平布局或是垂直布局都是布局上常用的配置方式。 布局组件 Row Column Wr...