PYQT5中实现图片轮播,Qlabel点击相应图片显示原图

PYQT5中实现图片轮播,Qlabel点击相应图片显示原图

  • 前言
  • 实现效果
  • 具体代码

前言

  在用pyqt5实现GUI时,一个界面放置图片太多,不是很美观。想做轮播效果,设定一定时间间隔对文件夹内图片轮流显示,并且点击相应图片能够弹出原图。

实现效果

PYQT5中实现图片轮播,Qlabel点击相应图片显示原图_第1张图片

具体代码

轮播效果:定时器实现

        self.timer1=QTimer(self)
        self.timer1.timeout.connect(self.timer_TimeOut)
        self.timer1.start(2000)#图片间隔时长
        
    def timer_TimeOut(self):
        self.n+=1
        if self.n>4:
            self.n=1
        self.lu ="./img/icon" +str(self.n)+".png"
        self.pm = QPixmap(self.lu)
        self.lbpic.setPixmap(self.pm)

点击事件:最初想通过Qlabel的鼠标点击事件绑定打开原图的。发现
Qlabel没有clicked,自己重写一个myLabel类继承QLabel。在通过信号槽机制实现。

class myLabel(QLabel):
    _signal = pyqtSignal(str)
    def __init__(self, parent=None):
        super(myLabel, self).__init__(parent)

    def mousePressEvent(self, e):  ##重载一下鼠标点击事件
            print("you clicked the label")
            self._signal.emit("正在检测中")
   

完整代码如下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer, pyqtSignal
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QApplication

#序列图片轮播,点击图片,打开原图

class MyClass(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.n=1
        self.initUI()

    def initUI(self):
        self.setWindowTitle("图片轮播")
        self.resize(400,300)
        global lu
        self.lu = "./img/icon" +str(self.n)+".png"
        self.pm=QPixmap(self.lu)
        self.lbpic=myLabel(self)
        self.lbpic.setPixmap(self.pm)
        self.lbpic.resize(200,200)
        self.lbpic.move(self.width()/2-self.lbpic.width()/2,50)
        self.lbpic.setScaledContents(True)
        self.lbpic._signal.connect(self.callbacklog)  # 连接信号

        self.timer1=QTimer(self)
        self.timer1.timeout.connect(self.timer_TimeOut)
        self.timer1.start(2000)
        self.show()

    def timer_TimeOut(self):
        self.n+=1
        if self.n>4:
            self.n=1
        self.lu ="./img/icon" +str(self.n)+".png"
        self.pm = QPixmap(self.lu)
        self.lbpic.setPixmap(self.pm)

    # 接受信号
    def callbacklog(self, msg):
        from PIL import Image
        import matplotlib.pyplot as plt
        img = Image.open(self.lu)
        plt.figure("image")
        plt.imshow(img)
        plt.show()


class myLabel(QLabel):
    _signal = pyqtSignal(str)#信号定义
    def __init__(self, parent=None):
        super(myLabel, self).__init__(parent)

    def mousePressEvent(self, e):  ##重载一下鼠标点击事件
            print("you clicked the label")
            self._signal.emit("正在检测中")

if __name__=="__main__":
    app=QApplication(sys.argv)

    mc=MyClass()
    sys.exit(app.exec_())

你可能感兴趣的:(PYQT5中实现图片轮播,Qlabel点击相应图片显示原图)