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

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

提前感谢大家!

【问题讨论】:

    标签: python user-interface pyqt5


    【解决方案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_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 2011-02-08
      相关资源
      最近更新 更多