2017-05-30 65 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_()) 

另一個好方法是在對象中安裝一個事件過濾器並覆蓋它的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類中添加以下初始化上下文菜單政策CustomeContextMenu其中listWidget_extractedmeters將是你QListWidget名稱:

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

然後在ControlMainwindow類以下功能允許您添加上下文菜單項,並呼籲一個函數執行一些功能:

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