1
A
回答
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)
相關問題
- 1. pyqt:單擊主窗口時的焦點窗口小部件
- 2. 特定窗口小部件的PyQt/PySide鍵盤快捷鍵
- 3. PyQt - 調整父級窗口小部件的子窗口大小
- 4. PyQt的:窗口小部件和按鈕
- 5. 用PyQt閃爍窗口小部件
- 6. PyQt通過單擊另一個按鈕來顯示一個窗口小部件
- 7. 管PyQt窗口小部件圖片到ffmpeg
- 8. 將文本添加到窗口小部件pyqt和python代碼
- 9. PyQt右鍵菜單QComboBox
- 10. 如何打開右鍵單擊窗口系統菜單?
- 11. 如何禁用右鍵單擊PyQt5和小部件問題
- 12. VueJS中的右鍵單擊和右鍵單擊事件
- 13. 右鍵單擊
- 14. 窗口小部件
- 15. 如何使用QT/PyQt中的可點擊文本創建窗口小部件?
- 16. TrayIcon右鍵單擊事件
- 17. Applescript右鍵單擊文件
- 18. CanJS右鍵單擊事件
- 19. 將事件綁定到右鍵單擊
- 20. Python PyQt:如何使用鼠標在窗口上移動窗口小部件?
- 21. 如何彈出右鍵單擊窗體?
- 22. Visual C#窗體右鍵單擊按鈕
- 23. 編輯窗口右鍵菜單在C#
- 24. 彈出窗口中的右鍵菜單
- 25. 想要在彈出窗口之外聽右鍵單擊。
- 26. 在右鍵單擊TableViewCell時顯示彈出窗口
- 27. 如何防止彈出窗口右鍵單擊使用JavaScript?
- 28. 將子窗口小部件的關鍵事件重定向到其父窗口小部件
- 29. PyQT - 修改其他功能的主窗口小部件
- 30. 如何在PyQT中檢測父窗口小部件?
如何在PyQT5中做到這一點? – Imran