簡體   English   中英

PyQt4:在屏幕上任意位置釋放鼠標時發出信號

[英]PyQt4: emit signal when mouse is released anywhere on the screen

問題是:我有QListWidget,該選擇模式允許通過單擊一個,拖動並在另一個上釋放來選擇多個項目。 我想在屏幕上任何地方釋放鼠標時發出信號(僅當鼠標首次在列表中的某個項目上按下時)。 我應該怎么做?

根據到目前為止的調查,QListWidget的信號為itemSelectionChanged,但是在拖動每個項目時選擇了每個新項目后,它將發出信號

QListWidget已信號單擊從QAbstractItemView繼承的信號,但這僅在將鼠標按下並釋放到同一項目上時有效

我試圖擴展QListWidget類並在其中定義mouseReleaseEvent,但這會覆蓋原始事件並破壞列表的正確行為

我試圖用installEventFilter制作空白標簽,並創建class mouseReleasedFilter,並且以某種方式工作了,但是還有更優雅的方法嗎?

class mouseReleasedFilter(QtCore.QObject):
    def __init__(self, parent = None):
        super(mouseReleasedFilter, self).__init__(parent)
    def eventFilter(self, object, event):
        if event.type() == QtCore.QEvent.MouseButtonRelease:
        print 'released'
        return False
    return True

self.filter = mouseReleasedFilter(self)

self.label.installEventFilter(self.filter)

我將不勝感激

我試圖擴展QListWidget類並在其中定義mouseReleaseEvent,但這會覆蓋原始事件並破壞列表的正確行為

這是正確的方法。 只需使用super運行您要覆蓋的方法:

class MyList(QtGui.QListWidget):
    def mouseReleaseEvent(self, e):
        super(MyList, self).mouseReleaseEvent(e)
        print('released', e)

例:

from PyQt4 import QtGui
app = QtGui.QApplication([])
class MyList(QtGui.QListWidget):
    def mouseReleaseEvent(self, e):
        super(MyList, self).mouseReleaseEvent(e)
        print('released', e)

l = MyList()
l.addItems(['hello', 'world'])
l.show()

輸出:

('released', <PyQt4.QtGui.QMouseEvent object at 0x72b4d40>)
('released', <PyQt4.QtGui.QMouseEvent object at 0x72b4d40>)
('released', <PyQt4.QtGui.QMouseEvent object at 0x72b4d40>)
('released', <PyQt4.QtGui.QMouseEvent object at 0x72b4d40>)
('released', <PyQt4.QtGui.QMouseEvent object at 0x72b4d40>)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM