gpt4 book ai didi

python - 如何在点击 QTreeWidget 的空白区域时执行函数

转载 作者:行者123 更新时间:2023-12-01 08:10:17 27 4
gpt4 key购买 nike

我正在使用Python3.6和PySide2

我有一个树形小部件-A,其中填充了员工列表。单击员工(treewidget-A 项目)时,将填充另一个 treeWidget-B。

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

这是为了填充树形小部件项目

self.treeWidget_A.itemClicked.connect(self.populate_employee)
self.treeWidget_A.currentItemChanged.connect(self.populate_employee)

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

def clear_employee_data(self):
self.treeWidget_B.clear()

最佳答案

您必须检测点击并验证不存在项目:

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 Designer 使用事件过滤器:

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_())

关于python - 如何在点击 QTreeWidget 的空白区域时执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55295958/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com