[英]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.