亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在鼠標滾輪事件期間獲取 pyqtgraph plotwidget 的 objectName?

如何在鼠標滾輪事件期間獲取 pyqtgraph plotwidget 的 objectName?

叮當貓咪 2022-10-18 14:54:49
我正在嘗試識別我正在滾動鼠標的 pyqtgraph plotwidget 的對象名稱。但是,我似乎只能獲得對象 id “0x0000018ED2ED74C8 處的 PyQt5.QtWidgets.QWidget 對象”。如果我使用 QApplication.widgetAt(event.globalPos()).objectName 我什么也得不到,即使我已經設置了對象名稱。你能幫助我嗎?示例代碼:# Import packagesfrom PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayoutimport pyqtgraph as pgimport sysclass MainWindow(QWidget):    def __init__(self):        super(MainWindow, self).__init__()        self.graphLayout = QHBoxLayout()        self.graph = pg.PlotWidget(name="graph1")        self.graph.setObjectName("graph1")        self.graphLayout.addWidget(self.graph)        self.setLayout(self.graphLayout)    def wheelEvent(self, event):        hoveredWidget = QApplication.widgetAt(event.globalPos())        print(hoveredWidget.objectName())if __name__ == '__main__':    app = QApplication(sys.argv)    ex = MainWindow()    ex.show()    sys.exit(app.exec_())
查看完整描述

1 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

PlotWidget 實際上是 QAbstractScrollArea 的子類,它是一個復雜的小部件,它至少具有三個子小部件:滾動條(即使它們被隱藏),最重要的是viewport,它實際上是滾動區域。

這意味著widgetAt()您使用的不是繪圖小部件(滾動區域),而是它的視口。實際上,在您的情況下,您可以通過檢查父級來獲取繪圖小部件:

    def wheelEvent(self, event):
        hoveredWidget = QApplication.widgetAt(event.globalPos())
        if hoveredWidget and hoveredWidget.parent():   
                 print(hoveredWidget.parent().objectName())

攔截來自父窗口小部件的事件時要小心,特別是對于像滾動區域這樣復雜的窗口小部件:不能保證您會收到它們,因為孩子可以接受它們,從而防止進一步傳播到他們的父母。

如果您需要對它們進行更多控制,通常最好在其子類中實現相應的方法或在實例上安裝事件過濾器。
請注意,由于上述原因,如果您想過濾滾動區域上的事件,您可能更愿意在視口上安裝過濾器:

    self.graph.viewport().installEventFilter(self)


查看完整回答
反對 回復 2022-10-18
  • 1 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號