我正在查看所有的拖放教程,但我找不到任何允许我拖动然后下载.msg文件的内容,就好像我只是将它从outlook拖到windows目录一样。在阅读QDataStream时,我原以为可以将mimedata写入QFile以创建.msg文件,但应用程序一旦命中out就崩溃了<;<;事件.mimeData()行。你知道吗
import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class TestListView(QListWidget):
trigger = pyqtSignal()
def __init__(self, type, parent=None):
super(TestListView, self).__init__(parent)
self.setAcceptDrops(True)
self.setIconSize(QtCore.QSize(72, 72))
def dragEnterEvent(self, event):
if event.mimeData().hasFormat("FileContents"):
event.acceptProposedAction()
def dragMoveEvent(self, event):
if event.mimeData().hasFormat("FileContents"):
event.acceptProposedAction()
def dropEvent(self, event):
if event.mimeData().hasFormat("FileContents"):
event.acceptProposedAction()
# print(event.mimeData().data())
file = QFile('test.msg')
file.open(QIODevice.WriteOnly)
out = QDataStream(file)
#print(event.mimeData().text())
#trying to capture mimedata to create the actual .msg
out << event.mimeData()
else:
event.ignore()
class MainForm(QMainWindow):
def __init__(self, parent=None):
super(MainForm, self).__init__(parent)
self.view = TestListView(self)
#self.view.trigger.connect(self.emailDropped)
self.setCentralWidget(self.view)
def emailDropped(self, l):
for url in l:
print(url)
def main():
app = QApplication(sys.argv)
form = MainForm()
form.show()
app.exec_()
if __name__ == '__main__':
main()
下面是回归事件.mimeData().formats()当我试图拖入一封电子邮件时-
['application/x-qt-windows-mime;value="RenPrivateSourceFolder"', 'application/x-qt-windows-mime;value="RenPrivateLatestMessages"', 'application/x-qt-windows-mime;value="RenPrivateMessages"', 'application/x-qt-windows-mime;value="RenPrivateItem"', 'application/x-qt-windows-mime;value="FileGroupDescriptor"', 'application/x-qt-windows-mime;value="FileGroupDescriptorW"', 'application/x-qt-windows-mime;value="FileNameW"', 'application/x-qt-windows-mime;value="FileContents"', 'application/x-qt-windows-mime;value="Object Descriptor"', 'text/plain', 'application/x-qt-windows-mime;value="CSV"', 'application/x-qt-windows-mime;value="DragImageBits"', 'application/x-qt-windows-mime;value="DragContext"']
不能让它只与qt模块一起工作,但我可以使用win32下载.msgcom客户端. 我的想法是,由于我将从outlook客户端拖动,我可以使用win32com下载当前突出显示的选择。你知道吗
注:此答案是在OP提供的一些澄清之后编辑的,因此它不是«实际»答案,因为它没有提供最终的预期结果。你知道吗
QDataStream
<<
操作数不接受python字符串或QObject:操作数仅适用于已知的兼容和可序列化的Qt类型(请参阅PyQt^{} 的文档),如QByteArray、QdateTime等。否则,最好使用
QDataStream.write*
方法:问题编辑和评论后更新
Outlook使用的} Outlook Item file format 以了解如何编写自己的文件。你知道吗
msg
格式不被视为“通用”标准,我无法为您的问题提供明确完整的答案。您需要深入研究^{也就是说,mime数据对象的每个和任何字段都可以通过
mimeData.data([format])
进行访问,该mimeData.data([format])
返回一个QByteArray,该QByteArray准备写入一个QDataStream,该QDataStream与一个打开的QFile一起使用。这也是out << event.mimeData()
不起作用的原因:它是一个QObject,不能直接序列化。你知道吗例如,根据您之前提供的格式,您可以使用以下方法访问“FileNameW”项:
现在由您按照上面给出的文档“构建”自己的msg文件。我知道这不是一个实际的答案,但我不使用Outlook,甚至不能提供最简单的示例,因为我无法相应地测试它。你知道吗
最后一个建议是:记住在最后调用
file.close()
,否则文件根本不会被写入。你知道吗相关问题 更多 >
编程相关推荐