QTextBrowser提供了可以显示文本的对话框,接下来利用这个实现拖拽文件显示文件路径
import os
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class Example(QMainWindow):
def __init__(self):
super(Example, self).__init__()
# 窗口标题
self.setWindowTitle('文件拖入')
# 定义窗口大小
self.resize(500, 400)
self.textBrowser = QTextBrowser()
self.setCentralWidget(self.textBrowser)
# 不换行设置
self.textBrowser.setLineWrapMode(0)
# 调用Drops方法
self.setAcceptDrops(True)
# 设置字体
font = QFont()
font.setFamily("黑体")
font.setPointSize(13)
self.textBrowser.setFont(font)
# 鼠标拖入事件
def dragEnterEvent(self, event):
self.textBrowser.setText('文件路径:\n' + os.path.dirname((event.mimeData().urls())[0].toLocalFile()))
if __name__ == "__main__":
app = QApplication(sys.argv)
example = Example()
example.show()
sys.exit(app.exec_())
这段代码可以在文本浏览框QTextBrowser拖入文件并显示文件的路径
接下来讲解下这段代码:
self.textBrowser = QTextBrowser()
self.setCentralWidget(self.textEdit)
第一句是用来创建不可编辑可显示信息的文本框,第二句是把文本框显示出来
self.textBrowser.setLineWrapMode(0)
当文本信息过长时,想按照文本的内容输出而不进行自动换行就可以使用这个语句
self.setAcceptDrops(True)
把self.setAcceptDrops()设置为True文本框就有接收拖入文件的功能,然后再实现dragEnterEvent()拖入事件
font = QFont()
font.setFamily("黑体")
font.setPointSize(13)
self.textBrowser.setFont(font)
这段代码可以设置文本框内的字体
def dragEnterEvent(self, event):
self.textBrowser.setText('文件路径:\n' + os.path.dirname((event.mimeData().urls())[0].toLocalFile()))
event.mimeData()可以用来接收通过拖放机制传输的信息,原本我用event.mimeData().text()返回的是‘file:///文件绝对路径’,但是这个每次都带‘file:///’,就需要另外写一个replace的函数替换掉,显得有点麻烦,于是我就用event.mimeData().urls,返回的是包含的URL列表,再用event.mimeData().urls())[0].toLocalFile()返回的就是'文件绝对路径',然后再用os.path.dirname就得到文件的路径并显示在文本框上。
截图所示:
拖入文件: