<aside>
目次:
</aside>
<aside> 💡 PySide6 から QActionがQtWidgetsからQtGuiに移動になっている。
PySide2: QtWidgets.QAction PySide6: QtGui.QAction
</aside>
class CustumListWidget(QtWidgets.QListWidget):
def __init__(self, parent=None):
super(CustumListWidget, self).__init__(parent)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self._setup_context_menu)
def _setup_context_menu(self, point):
menu = QtWidgets.QMenu(self)
action = QtGui.QAction('Menu1', self)
action.triggered.connect(self.menu1)
action.setShortcut(QtGui.QKeySequence('Ctrl+Shift+C'))
menu.addAction(action)
action = QtGui.QAction('Menu2', self)
menu.addAction(action)
menu.addSeparator()
action = QtGui.QAction('Menu3', self)
menu.addAction(action)
menu.exec_(self.mapToGlobal(point))
def menu1(self):
item = self.currentItem()
if item:
print(item.text())
def init_context_menu(self):
_ui = self.ui.file_browser
_ui.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
_ui.customContextMenuRequested.connect(self.setup_context_menu_file_browser)
def setup_context_menu_file_browser(self, point: QtCore.QPoint):
_ui = self.ui.file_browser
_menu = QtWidgets.QMenu(_ui)
_action = QtGui.QAction('Menu1', _ui)
_action.triggered.connect(_ui.menu1)
_action.setShortcut(QtGui.QKeySequence('Ctrl+Shift+C'))
_menu.addAction(_action)
_menu.addSeparator()
_action = QtGui.QAction('Menu2', _ui)
_menu.addAction(_action)
_menu.exec_(_ui.mapToGlobal(point))
import sys
from PySide2 import QtCore, QtGui, QtWidgets
class Test(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Test, self).__init__(parent)
app = QtWidgets.QApplication(sys.argv)
tool = Test()
tool.show()
app.exec_()
setContextMenuPolicy
を使います。ほとんどのWidgetで使う事が出来ますが、ListWidgetItemなどでは使えない(?)事が多いので、その場合は親クラスのListWidget側で右クリックメニューを設定します。
この目に見える奴らWidget
と呼ばれているものの基底クラスがQWidgetクラス
といっているようで、大体のWidgetはこれを継承して拡張されているっぽいです。例えばプッシュボタンのQPushButtonは以下のようになっています。
今回使うsetContextMenuPolicy
は、QWidgetクラスの持つ関数のようです。なのでQWidgetから派生してる子のクラスは大体使えるんじゃないかと思います。(未確認)
import sys
from PySide2 import QtCore, QtGui, QtWidgets
class Test(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Test, self).__init__(parent)
self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
app = QtWidgets.QApplication(sys.argv)
tool = Test()
tool.show()
app.exec_()
今回は、リストウィジェットに右クリックメニューを設定してみます。