pyqtgraph 在鼠标悬停时禁用父小部件滚动 on/is 从子小部件使用
pyqtgraph disable parent widget scrolling while mouse hovering on/is used from sub-widget
我有一个 QTreeWidget
,其中填充了两个子小部件 pyqtgraph.TableWidget()
和 pyqtgraph.ImageView()
。现在我遇到的问题是,当我的鼠标位于 ImageView
内时,它用于应用不同的操作(例如缩放 in/out 等),但这会影响 QTreeWidget
的滚动。我想做的是当我的鼠标位于(悬停?)ImageView
边界内并用于 ImageView
功能时禁用 QTreeWidget
的滚动。这可能吗?
这是我的小部件结构的一些代码片段:
# Tree
self.tree_widget = QtWidgets.QTreeWidget()
self.tree_widget.setHeaderLabels(["Key", "Value", "Image"])
root_item = QtWidgets.QTreeWidgetItem(["Test Item"])
self.tree_widget.addTopLevelItem(root_item)
# Data
val=numpy.random.normal(size=(32, 24, 3))
# Sub-widgets
tableWidget = pyqtgraph.TableWidget(sortable=False)
tableWidget.setData(val)
im1 = pyqtgraph.ImageView()
im1.setImage(val.T)
self.tree_widget.setItemWidget(root_item, 1, tableWidget)
self.tree_widget.setItemWidget(root_item, 2, im1)
不太清楚您遇到的鼠标事件是什么,因为我唯一能想到的就是滚轮事件。
如果是这种情况,只需创建 ImageViewer 的子类并将其接收到的所有滚轮事件设置为已接受:这样,ImageViewer 将按预期工作,但滚轮事件不会传播到父小部件(树):
class MyImageView(pyqtgraph.ImageView):
def wheelEvent(self, event):
event.accept()
# you can do the same with other mouse events, if that's your issue too
def mousePressEvent(self, event):
event.accept()
class YourWidget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
QtWidgets.QWidget.__init__(self, *args, **kwargs)
[...]
im1 = MyImageView()
我有一个 QTreeWidget
,其中填充了两个子小部件 pyqtgraph.TableWidget()
和 pyqtgraph.ImageView()
。现在我遇到的问题是,当我的鼠标位于 ImageView
内时,它用于应用不同的操作(例如缩放 in/out 等),但这会影响 QTreeWidget
的滚动。我想做的是当我的鼠标位于(悬停?)ImageView
边界内并用于 ImageView
功能时禁用 QTreeWidget
的滚动。这可能吗?
这是我的小部件结构的一些代码片段:
# Tree
self.tree_widget = QtWidgets.QTreeWidget()
self.tree_widget.setHeaderLabels(["Key", "Value", "Image"])
root_item = QtWidgets.QTreeWidgetItem(["Test Item"])
self.tree_widget.addTopLevelItem(root_item)
# Data
val=numpy.random.normal(size=(32, 24, 3))
# Sub-widgets
tableWidget = pyqtgraph.TableWidget(sortable=False)
tableWidget.setData(val)
im1 = pyqtgraph.ImageView()
im1.setImage(val.T)
self.tree_widget.setItemWidget(root_item, 1, tableWidget)
self.tree_widget.setItemWidget(root_item, 2, im1)
不太清楚您遇到的鼠标事件是什么,因为我唯一能想到的就是滚轮事件。
如果是这种情况,只需创建 ImageViewer 的子类并将其接收到的所有滚轮事件设置为已接受:这样,ImageViewer 将按预期工作,但滚轮事件不会传播到父小部件(树):
class MyImageView(pyqtgraph.ImageView):
def wheelEvent(self, event):
event.accept()
# you can do the same with other mouse events, if that's your issue too
def mousePressEvent(self, event):
event.accept()
class YourWidget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
QtWidgets.QWidget.__init__(self, *args, **kwargs)
[...]
im1 = MyImageView()