【发布时间】:2020-03-10 09:19:42
【问题描述】:
喂!我在 Pyqt5 中做了一个简单的 GUI。目前我正在尝试制作一个 GUI,用户可以在其中首先输入他们的信息,例如姓名、电子邮件地址,并且我正在尝试添加一个选项来添加他们的个人资料图片。因此,我想使用来自用户的输入图像,将其存储并稍后在应用程序中使用。这可能吗?
提前感谢大家!
【问题讨论】:
标签: python user-interface pyqt5
喂!我在 Pyqt5 中做了一个简单的 GUI。目前我正在尝试制作一个 GUI,用户可以在其中首先输入他们的信息,例如姓名、电子邮件地址,并且我正在尝试添加一个选项来添加他们的个人资料图片。因此,我想使用来自用户的输入图像,将其存储并稍后在应用程序中使用。这可能吗?
提前感谢大家!
【问题讨论】:
标签: python user-interface pyqt5
有几种方法可以做到这一点。小部件支持拖放;您可以实现拖放事件。或者,您可以打开文件目录并浏览照片。这是一个显示这两种方法的示例:
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_())
【讨论】: