2017-05-30 39 views

答えて

2

あなたはそれを世話するメソッドをオーバーライドするだけでよいのです。

この場合、mousePressEventをオーバーライドし、これを見て、それが理にかなっているかどうかを確認し、必要なものに適しているかどうかを確認します。

import sys 
from PyQt5.QtCore import Qt 
from PyQt5.QtWidgets import QApplication 
from PyQt5.QtWidgets import QWidget 


class MyWidget(QWidget): 


    def __init__(self): 
     super(MyWidget, self).__init__() 

    def mousePressEvent(self, QMouseEvent): 
     if QMouseEvent.button() == Qt.LeftButton: 
      print("Left Button Clicked") 
     elif QMouseEvent.button() == Qt.RightButton: 
      #do what you want here 
      print("Right Button Clicked") 

if __name__ == "__main__": 

    app = QApplication(sys.argv) 
    mw = MyWidget() 
    mw.show() 
    sys.exit(app.exec_()) 

これを行うもう1つの良い方法は、オブジェクトにイベントフィルタをインストールし、そのeventFilterを上書きすることです。その方法の中で、あなたはあなたが望むものを作るでしょう。良い習慣のためにpyqtSignalを使うことができることを覚えておいて、ロジックをたくさん使ってメソッドをオーバーロードすることなく、別のオブジェクトを呼び出してジョブを作ることを忘れないでください。ここで

は別の小さな例です。

import sys 

from PyQt5.QtCore import QEvent 
from PyQt5.QtCore import Qt 
from PyQt5.QtWidgets import QApplication 
from PyQt5.QtWidgets import QWidget 

class MyWidget(QWidget): 

    def __init__(self): 
     super(MyWidget, self).__init__() 
     self.installEventFilter(self) 

    def eventFilter(self, QObject, event): 
     if event.type() == QEvent.MouseButtonPress: 
      if event.button() == Qt.RightButton: 
       print("Right button clicked") 
     return False 

if __name__ == "__main__": 

    app = QApplication(sys.argv) 
    mw = MyWidget() 
    mw.show() 
    sys.exit(app.exec_()) 

注:はあなたが注意する必要があり、それはあなたがしたい一つだことを確認してませんので、この最後の例では、イベントのすべての種類を受信することを忘れないでください実行時に、その種類のものではないために存在しないイベントのアプリケーション呼び出しメソッドを破棄します。例えば、event.button()を呼び出す前に、それがQEvent.MouseButtonPressであることを確認せずに呼び出すと、あなたのアプリは途切れるでしょう。

これを行うには他にも方法がありますが、最もよく知られています。

0

私はこれを行う簡単な方法を考え出し、完璧に動作します。そして、ControlMainwindowクラスに以下の機能を使用すると、コンテキストメニュー項目を追加し、呼び出すことができ

self.listWidget_extractedmeters.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) 
self.listWidget_extractedmeters.connect(self.listWidget_extractedmeters,QtCore.SIGNAL("customContextMenuRequested(QPoint)"), self.listItemRightClicked) 

:ControlMainWindowクラスでlistWidget_extractedmetersがあなたのQListWidgetの名前になりますCustomeContextMenuとしてコンテキストメニューポリシーを初期化するために、以下を追加します

def listItemRightClicked(self, QPos): 
    self.listMenu= QtGui.QMenu() 
    menu_item = self.listMenu.addAction("Remove Item") 
    self.connect(menu_item, QtCore.SIGNAL("triggered()"), self.menuItemClicked) 
    parentPosition = self.listWidget_extractedmeters.mapToGlobal(QtCore.QPoint(0, 0))   
    self.listMenu.move(parentPosition + QPos) 
    self.listMenu.show() 

def menuItemClicked(self): 
    currentItemName=str(self.listWidget_extractedmeters.currentItem().text()) 
    print(currentItemName) 
+0

PyQT5での操作方法は? – Imran

関連する問題