QtDesigner中如何制作导入图片的工具? [关闭]

Posted

技术标签:

【中文标题】QtDesigner中如何制作导入图片的工具? [关闭]【英文标题】:how to make a tool to import images in QtDesigner? [closed] 【发布时间】:2021-02-26 10:02:38 【问题描述】:

我想制作一个按钮,我可以在其中从文件夹中选择图像,然后将其显示在窗口中。我希望这张图片有助于理解我的问题。

【问题讨论】:

你问的是你程序的逻辑,Designer只用于UI元素。使用 QPushButton 和 QLabel 创建一个窗口,保存 ui,然后按照有关 using Designer 的官方指南了解如何使用 pyuic 生成输出文件以及如何正确使用它并实现您的代码一个新的新脚本将导入它的逻辑(真的,使用一个新脚本,永远不要尝试编辑pyuic生成文件的内容,它被认为是非常不好的做法。 【参考方案1】:

我会给你一个做什么的想法,首先你可以使用任何库来读取图像,我使用 OpenCV,因为我稍后会处理图像,在我的情况下,我读取了一个包含一组图像的文件夹,但是图像的概念是相同的。你必须做两件事:

首先: 将按钮与执行文件浏览器的方法相关联,在我的例子中,我使用了 TK 库提供的方法,但还有更多。

第二: file_browser 提供的路径用于加载图像,然后将此图像关联到 GUI 的标签,方法在 view_image 方法中指定。

基本上就是这样,您必须阅读文档并将其适应您的应用程序。

import sys
import cv2
import select
import os
import pathlib
import shutil
from imutils import paths
import pickle

from PyQt5 import uic, QtWidgets, QtGui
from PyQt5.QtCore import QTimer
from PyQt5.QtCore import Qt,QSize
from PyQt5.QtGui import QImage
from PyQt5.QtGui import QIntValidator,QDoubleValidator
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMessageBox,QListWidgetItem

from tkinter import filedialog
from imutils import paths
from operator import itemgetter, attrgetter

qtCreatorFile = "GUI.ui" 

Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    
    def __init__(self):

        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.get_path_image_button.clicked.connect(self.get_images_dataset)
        self.view_image_button.clicked.connect(self.view_image)
        self.path_image = ''

    def get_images_dataset(self):
        root = Tk()
        root.withdraw()
        root.folder_name =  filedialog.askdirectory(
            title = 'Choose the directory of the input files'
            )

        self.path_dataset =root.folder_name
        if (root.folder_name):
            self.textBrowser.setText(
                '[INFO] Image directory path successfully uploaded'
                )
        else:
            self.textBrowser.setText(
                '[WARNING] No valid route selected'
                )
        root.destroy()

    def view_image(self):
        image_path = self.path_image 
        image = cv2.cvtColor(image_path, cv2.COLOR_BGR2RGB)
        height, width, channel = image.shape
        step = channel * width
        qImg = QImage(image.data, width, height, step, QImage.Format_RGB888)
        self.image_label.setPixmap(QPixmap.fromImage(qImg))
       

一个例子:

显然,这个结果与所附代码不对应,但它是一个例子。

【讨论】:

混合使用 tkinter 和 qt 感觉很奇怪。 是的,最好使用QFileDialog。我只是把我手头上的代码放了 @Andrewgmz 如果 Qt 可以做到,你为什么要使用 opencv 显示图像?要在 QLabel 中显示图像,只需:self.image_label.setPixmap(QPixmap(image_path)) 在我对图像应用一系列过滤器之前,我使用 opencv 处理图像,这只是代码的一部分,因此应用程序会找到图像中的突出对象。但这是正确的,如果您只想在 gui 中显示图像,则无需使用 opencv。只是这个问题不是很具体,我决定给出一个想法。

以上是关于QtDesigner中如何制作导入图片的工具? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Qt Designer的使用

#导入Word文档图片# 根文件系统制作与挂载

怎么制作透明图片,

如何用Bootstrap制作轮播图

FLASH如何制作飞机飞

如何在 pyqt GUI(QTdesigner)中显示“运行”控制台?