PyQt 5右クリックメニューを実現
3067 ワード
QWidgetおよびそのサブクラスは右クリックメニュー機能をサポートし、ContextMenuPolicyを宣言してメニューを有効にする
Qt.DefaultContextMenu
デフォルトメニュー、contextMenuEvent()を書き換えてカスタマイズ
Qt.NoContextMenu
メニューなし、イベント応答が部品の親に渡される
Qt.PreventContextMenu
メニューなし、イベント応答は転送されません
Qt.ActionsContextMenu
[イベント](Event)メニュー:アセンブリイベントのみに応答します.アセンブリサブアセンブリのイベントは応答しません.
Qt.CustomContextMenu
ユーザーがメニューをカスタマイズするには、イベントcustomContextMenuRequestedをバインドし、スロット関数を実装する必要があります.
1、ユーザーメニューを実現する
2、イベントメニュー#TODOを使う
3、デフォルトメニュー#TODOを書き換える
参考資料
【1】『QT実現右クリックショートカットメニュー』
【2】『QT学習ウィンドウ右ボタン』
【3】『Qt.ContextMenuPolicy』、公式サイト
Qt.DefaultContextMenu
デフォルトメニュー、contextMenuEvent()を書き換えてカスタマイズ
Qt.NoContextMenu
メニューなし、イベント応答が部品の親に渡される
Qt.PreventContextMenu
メニューなし、イベント応答は転送されません
Qt.ActionsContextMenu
[イベント](Event)メニュー:アセンブリイベントのみに応答します.アセンブリサブアセンブリのイベントは応答しません.
Qt.CustomContextMenu
ユーザーがメニューをカスタマイズするには、イベントcustomContextMenuRequestedをバインドし、スロット関数を実装する必要があります.
# self inherit QWidget
self.setContextMenuPolicy(Qt.DefaultContextMenu) # contextMenuEvent()
self.setContextMenuPolicy(Qt.NoContextMenu)
self.setContextMenuPolicy(Qt.PreventContextMenu)
self.setContextMenuPolicy(Qt.ActionsContextMenu)
self.setContextMenuPolicy(Qt.CustomContextMenu) # customContextMenuRequested()
1、ユーザーメニューを実現する
class handler_demo(QWidget, Ui_demo):
def __init__(self):
super().__init__()
self.setupUi(self)
# self inherit QWidget
self.table_widget.setContextMenuPolicy(Qt.CustomContextMenu)
self.table_widget.customContextMenuRequested.connect(self.custom_right_menu)
def custom_right_menu(self, pos):
menu = QMenu()
opt1 = menu.addAction("menu1")
opt2 = menu.addAction("menu2")
action = menu.exec_(self.table_widget.mapToGlobal(pos))
if action == opt1:
# do something
return
elif action == opt2:
# do something
return
else:
return
2、イベントメニュー#TODOを使う
class handler_demo(QWidget, Ui_demo):
def __init__(self):
super().__init__()
self.setupUi(self)
# self inherit QWidget
self.table_widget.setContextMenuPolicy(Qt.ActionsContextMenu)
self.table_widget.customContextMenuRequested.connect(self.custom_right_menu)
def custom_right_menu(self, pos):
menu = QMenu()
opt1 = menu.addAction("menu1")
opt2 = menu.addAction("menu2")
action = menu.exec_(self.table_widget.mapToGlobal(pos))
if action == opt1:
# do something
return
elif action == opt2:
# do something
return
else:
return
3、デフォルトメニュー#TODOを書き換える
class handler_demo(QWidget, Ui_demo):
def __init__(self):
super().__init__()
self.setupUi(self)
def contextMenuEvent(self, event):
menu = QMenu()
opt1 = menu.addAction("menu1")
opt2 = menu.addAction("menu2")
action = menu.exec_(self.table_widget.mapToGlobal(event.pos()))
if action == opt1:
# do something
return
elif action == opt2:
# do something
return
menu.move(event.pos())
menu.show()
参考資料
【1】『QT実現右クリックショートカットメニュー』
【2】『QT学習ウィンドウ右ボタン』
【3】『Qt.ContextMenuPolicy』、公式サイト