Простое приложение PyQt5 для чтения и отображения изображений

Предисловие

Эта статья представляет собой вводное руководство по PyQt5, в частности следующие четыре шага.

  • 1. Простой дизайн интерфейса программы.
  • 2. Прочитайте изображение указанного пути через раскрывающийся список.
  • 3. Отображение прочитанных изображений на интерфейсе.
  • 4. Выходное событие

Конечный эффект следующий: 


 

1. Простой дизайн интерфейса программы.

Первоначальная структура программы следующая.

#利用PyQt建立界面必须使用QApplication,代表整个应用程序,是整个Qt的命脉,主要负责应用程序的初始化和结束
import sys  #引用sys库
from PyQt5 import QtWidgets #引用PyQt5库里QtWidgets类
from PyQt5.QtWidgets import *   #导入PyQt5.QtWidgets里所有的方法
from PyQt5.QtGui import *    #导入PyQt5.QtGui里所有的方法
import os    #引用os库
class Qt_Window(QWidget):   #定义一个类,继承于QWidget
    def __init__(self): #构建方法
        self._app = QtWidgets.QApplication([])  #创建QApplication示例
        super(Qt_Window,self).__init__()    #固定格式

    def init_ui(self):  #定义方法,在该方法里构建界面组件
        self.win = QMainWindow()




        self.win.showFullScreen()   #窗口全屏显示,不带标题栏和边框
        sys.exit(self._app.exec_()) #sys.exit()退出程序机制 app.exec_()的作用是运行主循环,开始进行事件处理,直到结束
s = Qt_Window() #调用对象和方法
s.init_ui() #调用对象和方法

Запускаем макет интерфейса в init_ui (Примечание: разрешение 1920×1080) 

def init_ui(self):
        self.win = QMainWindow()

        #定义组件
        self.comboBox = QComboBox(self.win)    #下拉列表框
        self.number_lable = QLabel(self.win)    #标签
        self.open_Button = QPushButton(self.win)    #退出按钮
        self.detect_image = QLabel(self.win)    #图片(目前为标签控件,需要后续将其转换为图片控件)
        
        #设置控件
        self.comboBox.resize(200,50)
        self.comboBox.move(600,800)

        self.open_Button.resize(200,50)
        self.open_Button.move(1000,800)
        self.open_Button.setText("退出")

        self.detect_image.resize(700,550)
        self.detect_image.move(550,100)

        self.number_lable.resize(200,50)
        self.number_lable.move(900,700)
        
        #resize为设置大小,move为设置x与y坐标,setText为设置控件文本内容
        
      
        self.win.showFullScreen()
        sys.exit(self._app.exec_())

Результат должен быть  таким: Примечание. Кнопка выхода в настоящее время не действует. Вы можете выйти из интерфейса самостоятельно.

Текущий код макета:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import os
class Qt_Window(QWidget):
    def __init__(self):
        self._app = QtWidgets.QApplication([])
        super(Qt_Window,self).__init__()

    def init_ui(self):
        self.win = QMainWindow()

        self.comboBox = QComboBox(self.win)
        self.number_lable = QLabel(self.win)
        self.open_Button = QPushButton(self.win)
        self.detect_image = QLabel(self.win)
        
        self.comboBox.resize(200,50)
        self.comboBox.move(600,800)

        self.open_Button.resize(200,50)
        self.open_Button.move(1000,800)
        self.open_Button.setText("退出")

        self.detect_image.resize(700,550)
        self.detect_image.move(550,100)

        self.number_lable.resize(200,50)
        self.number_lable.move(900,700)
   
        self.win.showFullScreen()
        sys.exit(self._app.exec_())

s = Qt_Window()
s.init_ui()

2. Считайте изображения по указанному пути через раскрывающийся список.

1.Установить путь

В обычных обстоятельствах лучше всего установить абсолютный путь и ввести следующее в init_ui:

self.path = ("C:\\123\\picture\\")

При задании пути обязательно вводите "\\" вместо одиночного "\". Одиночный "\" будет экранировать первую букву после "\"! 

2. Добавьте имя прочитанного изображения в раскрывающийся список.

Используйте команду os.listdir() для чтения всех файлов в папке.

        self.img_list = os.listdir(self.path)

На этом этапе вы можете попытаться вывести этот self.img_list.

 (в папке) 

(выходной результат)

Видно, что результаты согласованы, а возвращаемые результаты представляют собой списки. Если вы хотите добавить этот результат в раскрывающийся список, вам следует использовать цикл for... in... для замены данных.

        self.comboBox.addItems([self.img_list[i] for i in range(len(self.img_list))])

Смысл приведенного выше кода: добавьте данные из списка self.img_list в раскрывающийся список.

self.comboBox.addItems() добавляет несколько списков

for i in range(len(self.img_list)) сначала вычисляет длину self.img_list как от 3 до len, затем использует диапазон для преобразования ее в интервал 0–3, а затем подставляет число 0–3 в i, Затем добавьте в него данные из self.img_list[i].

Например: self.img_list[0] — sky.jpg, self.img_list[1] — Ocean.jpg.

Примечание: range() выводит серию непрерывных данных, а len() выводит одиночные данные, поэтому при размещении операции цикла range() будет выполнять цикл несколько раз, а len() — только один раз!

В это время, когда вы открываете последовательный порт, вы можете видеть, что все изображения по пути были добавлены в раскрывающийся список.

 

3. Отображение прочитанных изображений на интерфейсе.

Нам необходимо в реальном времени отслеживать, какое изображение выбрано в раскрывающемся списке, и в это время мы можем самостоятельно определить событие списка выбора.

    def show_img(self):
        img = self.comboBox.currentText()
        pix = QPixmap(self.path + "\\" +img)    #需额外添加"\\"否则输出为C:\123\picture093056.jpg
        self.detect_image.setPixmap(pix)
        self.detect_image.setScaledContents(True)
        self.number_lable.setText(img)

Сначала получите текст (имя изображения) в текущем раскрывающемся списке с помощью функции currentText(), а затем добавьте полученное имя изображения в путь, а затем используйте QPixmap для его отображения. Измените пиксель на изображение по вашему выбору, а затем используйте функцию setPixmap, чтобы преобразовать элемент управления define_image в интерфейсе из метки в изображение.

Поскольку разрешение изображения не является одинаковым, вы можете добавить функцию setScaledContents(True), чтобы установить для него адаптивный размер (размер элемента управления, заданный при настройке интерфейса ранее).

self.number_lable.setText(img) выводит имя прочитанного изображения в интерфейс

На данный момент мы определили только это событие. Нам нужно привязать это событие к раскрывающемуся списку и ввести следующий код в init_ui.

        self.comboBox.activated.connect(self.show_img)

На этом этапе откройте интерфейс и выберите изображение, чтобы увидеть следующие результаты.

 Если вы хотите изменить Ocean.jpg на Ocean, вы можете изменить код, который устанавливает текст метки в событии списка выбора следующим образом:

        lable = img.split(".")[0]
        self.number_lable.setText(lable)

Используйте команду Split(".") для вывода списка (океан, jpg) в файле Ocean.jpg с "." в качестве разделителя и добавьте [0] в конце, чтобы указать, что выводится только первый из них, т. е. есть, только на выходе получается «океан».

Когда вы снова откроете интерфейс, вы увидите

4. Выходное событие

1. Определите выходное событие

Пользовательское выходное событие

    def exit(self): #定义关闭事件
        while True:
            sys.exit(0) #sys.exit(0)为正常退出  sys.exit(1)为异常退出

 Затем свяжите элемент управления кнопкой выхода и событие выхода.

        self.open_Button.clicked.connect(self.exit)

На этом этапе откройте интерфейс и нажмите кнопку выхода, чтобы выйти в обычном режиме. 

Подведем итог

Полный код выглядит следующим образом

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import os
class Qt_Window(QWidget):
    def __init__(self):
        self._app = QtWidgets.QApplication([])
        super(Qt_Window,self).__init__()

    def init_ui(self):
        self.win = QMainWindow()

        self.comboBox = QComboBox(self.win)
        self.number_lable = QLabel(self.win)
        self.open_Button = QPushButton(self.win)
        self.detect_image = QLabel(self.win)

        #设置路径
        self.path = ("C:\\123\\picture\\")
        
        self.comboBox.resize(200,50)
        self.comboBox.move(600,800)
        self.img_list = os.listdir(self.path)
        self.comboBox.addItems([self.img_list[i] for i in range(len(self.img_list))])
        self.comboBox.activated.connect(self.show_img)


        self.open_Button.resize(200,50)
        self.open_Button.move(1000,800)
        self.open_Button.setText("退出")
        self.open_Button.clicked.connect(self.exit)

        self.detect_image.resize(700,550)
        self.detect_image.move(550,100)

        self.number_lable.resize(200,50)
        self.number_lable.move(900,700)
        
      
        self.win.showFullScreen()
        sys.exit(self._app.exec_())

    def show_img(self):
        img = self.comboBox.currentText()
        pix = QPixmap(self.path + "\\" +img)
        self.detect_image.setPixmap(pix)
        self.detect_image.setScaledContents(True)
        lable = img.split(".")[0]
        self.number_lable.setText(lable)

    def exit(self):
        while True:
            sys.exit(0)

s = Qt_Window()
s.init_ui()

Выше описан мой производственный процесс. Если у вас возникнут какие-либо вопросы или есть ошибки в статье, отправьте личное сообщение или комментарий. 

おすすめ

転載: blog.csdn.net/weixin_57037287/article/details/129158163