如何要求用户在 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 - 如何在“按钮”小部件中添加图像? | (不是图标)
如何将来自用户的输入图像与 C# 中数据库中存储的图像进行比较 [关闭]