首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在QTreeWidget的空域点击时执行函数

如何在QTreeWidget的空域点击时执行函数
EN

Stack Overflow用户
提问于 2019-03-22 08:52:50
回答 1查看 297关注 0票数 1

我使用Python3.6和PySide2

我有一棵树,里面有员工名单。单击employee (treewidget-A项),另一个treeWidget将填充。

现在,如果我单击空区域(取消选择项),但treeWidget仍然显示上次单击的员工项详细信息。

这是用来填充树型的

代码语言:javascript
运行
复制
self.treeWidget_A.itemClicked.connect(self.populate_employee)
self.treeWidget_A.currentItemChanged.connect(self.populate_employee)

如何执行clear_employee_data()函数,点击QtreeWidget的空区域?

代码语言:javascript
运行
复制
def clear_employee_data(self):
    self.treeWidget_B.clear()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-22 09:10:24

您必须检测到单击并验证没有项目:

代码语言:javascript
运行
复制
from PySide2 import QtCore, QtWidgets

class TreeWidget(QtWidgets.QTreeWidget):
    emptyClicked = QtCore.Signal()

    def __init__(self, parent=None):
        super(TreeWidget, self).__init__(parent)
        for i in range(2):
            it = QtWidgets.QTreeWidgetItem(self, ["item-{}".format(i)])
            for j in range(3):
                child_it = QtWidgets.QTreeWidgetItem(it, ["item-{}-{}".format(i, j)])
        self.expandAll()

    def mousePressEvent(self, event):
        super(TreeWidget, self).mousePressEvent(event)
        if not self.indexAt(event.pos()).isValid():
            self.emptyClicked.emit()

@QtCore.Slot()
def on_empty_clicked():
    print("clicked")

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = TreeWidget()
    w.emptyClicked.connect(on_empty_clicked)
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

对于Qt设计器,请使用事件过滤器:

代码语言:javascript
运行
复制
from PySide2 import QtCore, QtGui, QtWidgets

from design import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    emptyClicked = QtCore.Signal()

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.treeWidget_A.viewport().installEventFilter(self)
        self.emptyClicked.connect(self.on_emptyClicked)

    def eventFilter(self, obj, event):
        if obj is self.treeWidget_A.viewport() and event.type() == QtCore.QEvent.MouseButtonPress:
            if not self.treeWidget_A.indexAt(event.pos()).isValid():
                self.emptyClicked.emit()
        return super(MainWindow, self).eventFilter(obj, event)

    @QtCore.Slot()
    def on_emptyClicked(self):
        print("empty")

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55295958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档