以下は、あなたが望むものの大半を行うデモです。重要なメソッドはchildAtで、指定されたポイントで子ウィジェットを取得します。明らかに、これが機能するためには、すべてのターゲットウィジェットがイベントを処理するウィジェットの子孫でなければなりません。 lastpos
チェックは、真のクリック事象(すなわち、同じウィジェット上でのマウス・プレス・アンド・リリース)を検出するために使用される。
import sys
from PySide import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.scroll = QtGui.QScrollArea()
self.scroll.setWidgetResizable(True)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.scroll)
widget = QtGui.QWidget()
layout = QtGui.QVBoxLayout(widget)
for text in 'red green yellow purple orange blue'.split():
item = QtGui.QFrame()
item.setObjectName(text)
item.setStyleSheet('background-color: %s' % text)
layout.addWidget(item)
self.scroll.setWidget(widget)
self._lastpos = None
def mousePressEvent(self, event):
self._lastpos = event.pos()
def mouseReleaseEvent(self, event):
widget = self.childAt(event.pos())
if (widget is not None and self._lastpos is not None and
widget is self.childAt(self._lastpos)):
if widget.objectName():
print('click:', widget.objectName())
self._lastpos = None
def mouseDoubleClickEvent(self, event):
widget = self.childAt(event.pos())
if widget is not None and widget.objectName():
print('dblclick:', widget.objectName())
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 300, 400)
window.show()
sys.exit(app.exec_())
はい!あなたの例を実装し、それは働いた!だから私のスクロールエリア内の私の生成ウィジェットのすべてのために、私はそれらを辞書に格納し、私は再びそのウィジェットを呼び出すことができました(背景色を変更するような)self.mywidget [widget.objectName()] 。 objectNameを使ってウィジェットを編集するより良い方法があるのでしょうか、それを行う良い方法でしょうか? – ghost654
@ ghost654辞書を使用するのは完全に合理的です。また、すでにウィジェットがあるので、クリックされたウィジェットを送信したカスタムの 'rowClicked'シグナルを送出してから、接続されたスロットにバックグラウンドを設定することもできます。 – ekhumoro
左クリックボタンからmousePressEvent、mouseReleaseEvent、およびMouseDoubleClickEventだけを受け入れるように指定する方法はありますか?右クリックが同じことをしているように見えます。 右クリックの検索に使用できるイベントはありますか?ドロップダウンメニューを行うには def contextMenuEvent(self、event):右クリックについては – ghost654