如何要求用户在 Pyqt5 中输入图像 [关闭]

Posted

技术标签:

【中文标题】如何要求用户在 Pyqt5 中输入图像 [关闭]【英文标题】:How to ask user to input an image in Pyqt5 [closed] 【发布时间】:2020-03-10 09:19:42 【问题描述】:

喂!我在 Pyqt5 中做了一个简单的 GUI。目前我正在尝试制作一个 GUI,用户可以在其中首先输入他们的信息,例如姓名、电子邮件地址,并且我正在尝试添加一个选项来添加他们的个人资料图片。因此,我想使用来自用户的输入图像,将其存储并稍后在应用程序中使用。这可能吗?

提前感谢大家!

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。小部件支持拖放;您可以实现拖放事件。或者,您可以打开文件目录并浏览照片。这是一个显示这两种方法的示例:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class PhotoLabel(QLabel):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setAlignment(Qt.AlignCenter)
        self.setText('\n\n Drop Image Here \n\n')
        self.setStyleSheet('''
        QLabel 
            border: 4px dashed #aaa;
        ''')

    def setPixmap(self, *args, **kwargs):
        super().setPixmap(*args, **kwargs)
        self.setStyleSheet('''
        QLabel 
            border: none;
        ''')


class Template(QWidget):

    def __init__(self):
        super().__init__()
        self.photo = PhotoLabel()
        btn = QPushButton('Browse')
        btn.clicked.connect(self.open_image)
        grid = QGridLayout(self)
        grid.addWidget(btn, 0, 0, Qt.AlignHCenter)
        grid.addWidget(self.photo, 1, 0)
        self.setAcceptDrops(True)
        self.resize(300, 200)

    def dragEnterEvent(self, event):
        if event.mimeData().hasImage:
            event.accept()
        else:
            event.ignore()

    def dragMoveEvent(self, event):
        if event.mimeData().hasImage:
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasImage:
            event.setDropAction(Qt.CopyAction)
            filename = event.mimeData().urls()[0].toLocalFile()
            event.accept()
            self.open_image(filename)
        else:
            event.ignore()

    def open_image(self, filename=None):
        if not filename:
            filename, _ = QFileDialog.getOpenFileName(self, 'Select Photo', QDir.currentPath(), 'Images (*.png *.jpg)')
            if not filename:
                return
        self.photo.setPixmap(QPixmap(filename))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = Template()
    gui.show()
    sys.exit(app.exec_())

【讨论】:

以上是关于如何要求用户在 Pyqt5 中输入图像 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 如何在编译后更新资源文件?

PyQt5 - 如何在“按钮”小部件中添加图像? | (不是图标)

如何在 PyQt5 中正确异步加载图像?

如何将来自用户的输入图像与 C# 中数据库中存储的图像进行比较 [关闭]

如何修复 iPhone 横向放大/缩小图像的大小? [关闭]

我如何从打印机“扫描仪”获取图像 [关闭]