私はPyQtを使用していますが、ウィジェットに右クリックを追加したいのですが、このトピックでオンラインでコードを見つけることはできません。PyQt - ウィジェットに右クリックして追加
どうすればいいですか?
私はPyQtを使用していますが、ウィジェットに右クリックを追加したいのですが、このトピックでオンラインでコードを見つけることはできません。PyQt - ウィジェットに右クリックして追加
どうすればいいですか?
あなたはそれを世話するメソッドをオーバーライドするだけでよいのです。
この場合、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
であることを確認せずに呼び出すと、あなたのアプリは途切れるでしょう。
これを行うには他にも方法がありますが、最もよく知られています。
私はこれを行う簡単な方法を考え出し、完璧に動作します。そして、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)
PyQT5での操作方法は? – Imran