• 2022-08-06


    1.实现了文件拖入自动读取功能,主要思路是给窗口类或者自定义类添加一个事件过滤器,并且在发生拖入事件时实现相关逻辑。

    1. def eventFilter(self, obj, event):
    2. """
    3. 处理窗体内出现的事件,如果有需要则自行添加if判断语句;
    4. 目前已经实现将拖到控件上文件的路径设置为控件的显示文本;
    5. """
    6. if event.type() == QtCore.QEvent.DragEnter:
    7. event.accept()
    8. if event.type() == QtCore.QEvent.Drop:
    9. print("enter")
    10. md = event.mimeData()
    11. if md.hasUrls():
    12. # 此处md.urls()的返回值为拖入文件的file路径列表,即支持多文件同时拖入;
    13. # 此处默认读取第一个文件的路径进行处理,可按照个人需求进行相应的修改
    14. url = md.urls()[0]
    15. self.f_list = []
    16. for url in md.urls():
    17. self.f_list.append(url.toLocalFile())
    18. obj.setText(",".join(self.f_list))
    19. self.load_data()
    20. return True
    21. return super().eventFilter(obj, event)

    相应的控件添加如下代码

    1. self.h1_text.setAcceptDrops(True)
    2. self.h1_text.installEventFilter(self)

    这两句代码意思是首先设置控件可以接收drop事件,然后指定事件过滤器的实例。

    2.把下拉列表改成可搜索模式,用了一个网上写好的扩展类,代码如下

    1. class ExtendedComboBox(QComboBox):
    2. def __init__(self, parent=None):
    3. super(ExtendedComboBox, self).__init__(parent)
    4. self.setFocusPolicy(Qt.StrongFocus)
    5. self.setEditable(True)
    6. # add a filter model to filter matching items
    7. self.pFilterModel = QSortFilterProxyModel(self)
    8. self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
    9. self.pFilterModel.setSourceModel(self.model())
    10. # add a completer, which uses the filter model
    11. self.completer = QCompleter(self.pFilterModel, self)
    12. # always show all (filtered) completions
    13. self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
    14. self.setCompleter(self.completer)
    15. # connect signals
    16. self.lineEdit().textEdited.connect(self.pFilterModel.setFilterFixedString)
    17. self.completer.activated.connect(self.on_completer_activated)
    18. # on selection of an item from the completer, select the corresponding item from combobox
    19. def on_completer_activated(self, text):
    20. if text:
    21. index = self.findText(text)
    22. self.setCurrentIndex(index)
    23. self.activated[str].emit(self.itemText(index))
    24. # on model change, update the models of the filter and completer as well
    25. def setModel(self, model):
    26. super(ExtendedComboBox, self).setModel(model)
    27. self.pFilterModel.setSourceModel(model)
    28. self.completer.setModel(self.pFilterModel)
    29. # on model column change, update the model column of the filter and completer as well
    30. def setModelColumn(self, column):
    31. self.completer.setCompletionColumn(column)
    32. self.pFilterModel.setFilterKeyColumn(column)
    33. super(ExtendedComboBox, self).setModelColumn(column)

    原来我写的代码不用做任何改变,直接把类名改下就行,可以说很方便了。

    3.添加了进度条。今天终于时把进度条弄明白了,可能我之前进度计算错了,导致一直是0,今天本来没想做进度条,而是做大文件读取时界面卡死问题,网上说是单独开个线程,这个之前也知道了,但是数据不知道怎么获取,今天试了下,跟普通信号没什么区别,建个dataframe的信号就行了,读完直接向主窗口发信号就行了,主窗口新写个接收信号的函数就行了。

  • 相关阅读:
    k8s教程(02)-入门及案例
    如何使用 GTX750 或 1050 显卡安装 CUDA11+
    uniapp h5 echarts 打包后图表点击失效/及其他失效
    【示波器专题】示波器触发电路原理
    Windows『技巧』在不同前端项目中各种启动不同的Node环境、热启动 - nodemon代替node自动重启项目
    Redis高级数据类型-HyperLogLog&Bitmap以及使用两种数据类型完成网站数据统计
    互联网Java工程师面试题·Java 总结篇·第八弹
    中国钛合金自行车出口海外营销策略-大舍传媒
    系统间远程调用方式的演变
    合格论文的七个要素!
  • 原文地址:https://blog.csdn.net/zy1620454507/article/details/126191242