teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

8

書式の修正

2021/05/31 13:59

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -34,6 +34,7 @@
34
34
   ※ ない場合は、Qt 開発環境のインストールが必要
35
35
  - `translater.load` で .qm ファイルを読み込む
36
36
 
37
+ ----
37
38
 
38
39
  > これらのメニューに表示される項目を減らす方法
39
40
  > そしてこれらのメニューに機能を追加することです

7

追記: TSファイルのサンプル

2021/05/31 13:59

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -8,6 +8,33 @@
8
8
  ![イメージ説明](f225397b200962ef16ef0190b216b398.png)
9
9
 
10
10
 
11
+ 追記: .ts ファイルのサンプル
12
+ ```xml
13
+ <?xml version="1.0" encoding="utf-8"?>
14
+ <!DOCTYPE TS>
15
+ <TS version="2.1" language="ja">
16
+ <context>
17
+ <name>RenderViewContextMenuQt</name>
18
+ <message>
19
+ <source>Forward</source>
20
+ <translation>進む</translation>
21
+ </message>
22
+ <message>
23
+ <source>Back</source>
24
+ <translation>戻る</translation>
25
+ </message>
26
+ </context>
27
+ </TS>
28
+ ```
29
+
30
+ 手順
31
+ - 上記のXMLを拡張子 .ts で保存します。文字コードは utf-8
32
+ - 他の文字の翻訳は、サンプルを参考に `<message>` を増やしてください。
33
+ - lrelease コマンドで .ts ファイルから .qm ファイルを生成
34
+  ※ ない場合は、Qt 開発環境のインストールが必要
35
+ - `translater.load` で .qm ファイルを読み込む
36
+
37
+
11
38
  > これらのメニューに表示される項目を減らす方法
12
39
  > そしてこれらのメニューに機能を追加することです
13
40
 

6

サンプルコードの更新、実行可能な形式に

2021/05/31 13:59

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -18,34 +18,59 @@
18
18
  追記: page().createStandardContextMenu() で可能でした。
19
19
 
20
20
  ```python
21
+
22
+ import sys
23
+ from PyQt5.QtCore import Qt, QUrl
24
+ from PyQt5.QtWidgets import (
25
+ QApplication,
26
+ QMainWindow,
27
+ QMessageBox,
28
+ QAction,
29
+ QMenu,
30
+ )
31
+ from PyQt5.QtWebEngineWidgets import (
32
+ QWebEngineView,
33
+ QWebEnginePage,
34
+ )
35
+
21
36
  ## 方法1 contextMenuEvent
22
37
  # QWebEngineView を継承したサブクラスを作る
23
38
 
24
39
  class MyWebEngineView(QWebEngineView):
25
40
 
41
+ def showTestDialog(self):
42
+ QMessageBox.information(self, "Test", f"test action was called")
43
+
26
44
  def contextMenuEvent(self, event):
27
45
  ## 既存のメニューをカスタマイズする場合
28
46
  menu = self.page().createStandardContextMenu()
29
47
 
30
48
  # ここで QMenu メニューをカスタマイズ
49
+ menu.addSeparator()
31
50
 
51
+ action = QAction("Test")
52
+ action.triggered.connect(self.showTestDialog)
53
+ menu.addAction(action)
54
+
32
55
  menu.aboutToHide.connect(menu.deleteLater)
33
56
  menu.exec_(event.globalPos())
34
57
 
35
58
 
36
- ## 方法2 CustomContextMenu
59
+ ## 方法2 CustomContextMenu
37
60
 
38
- ...
61
+ def createWebView(parent):
62
+ view = QWebEngineView(parent)
39
63
 
40
64
  def saveLink():
41
- print("Save Link")
65
+ # 既存のメニューの機能を呼び出し
42
66
  view.triggerPageAction(
43
67
  QWebEnginePage.CopyLinkToClipboard)
44
68
 
45
69
  def customContextMenuRequested(pos):
46
- ## 新規にメニューを作る
70
+ ## 新規にメニューを作る場合
47
71
  menu = QMenu(view)
48
72
 
73
+ # ここで QMenu メニューをカスタマイズ
49
74
  action = QAction("Save Link")
50
75
  action.triggered.connect(saveLink)
51
76
  menu.addAction(action)
@@ -53,9 +78,29 @@
53
78
  menu.aboutToHide.connect(menu.deleteLater)
54
79
  menu.exec_(view.mapToGlobal(pos))
55
80
 
81
+ # カスタムメニューの為の設定
56
82
  view.setContextMenuPolicy(Qt.CustomContextMenu)
57
83
  view.customContextMenuRequested.connect(customContextMenuRequested)
58
84
 
85
+ return view
86
+
87
+
88
+ def main():
89
+ app = QApplication(sys.argv)
90
+ win = QMainWindow()
91
+ view = MyWebEngineView(win)
92
+ # view = createWebView(win)
93
+
94
+ view.setUrl(QUrl("https://www.google.com/"))
95
+ win.setCentralWidget(view)
96
+ win.resize(600, 600)
97
+ win.show()
98
+ sys.exit(app.exec_())
99
+
100
+
101
+ if __name__ == '__main__':
102
+ main()
103
+
59
104
  ```
60
105
 
61
106
  Context Menu (右クリック時のメニュー) のカスタマイズ方法

5

方法2 のカスタムメニューの例を追加

2021/05/31 02:16

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -18,15 +18,44 @@
18
18
  追記: page().createStandardContextMenu() で可能でした。
19
19
 
20
20
  ```python
21
+ ## 方法1 contextMenuEvent
21
22
  # QWebEngineView を継承したサブクラスを作る
22
23
 
24
+ class MyWebEngineView(QWebEngineView):
25
+
23
26
  def contextMenuEvent(self, event):
27
+ ## 既存のメニューをカスタマイズする場合
24
28
  menu = self.page().createStandardContextMenu()
25
29
 
26
30
  # ここで QMenu メニューをカスタマイズ
27
31
 
32
+ menu.aboutToHide.connect(menu.deleteLater)
28
33
  menu.exec_(event.globalPos())
29
34
 
35
+
36
+ ## 方法2 CustomContextMenu
37
+
38
+ ... 略
39
+
40
+ def saveLink():
41
+ print("Save Link")
42
+ view.triggerPageAction(
43
+ QWebEnginePage.CopyLinkToClipboard)
44
+
45
+ def customContextMenuRequested(pos):
46
+ ## 新規にメニューを作る
47
+ menu = QMenu(view)
48
+
49
+ action = QAction("Save Link")
50
+ action.triggered.connect(saveLink)
51
+ menu.addAction(action)
52
+
53
+ menu.aboutToHide.connect(menu.deleteLater)
54
+ menu.exec_(view.mapToGlobal(pos))
55
+
56
+ view.setContextMenuPolicy(Qt.CustomContextMenu)
57
+ view.customContextMenuRequested.connect(customContextMenuRequested)
58
+
30
59
  ```
31
60
 
32
61
  Context Menu (右クリック時のメニュー) のカスタマイズ方法

4

コード追記

2021/05/30 12:14

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -17,6 +17,18 @@
17
17
 
18
18
  追記: page().createStandardContextMenu() で可能でした。
19
19
 
20
+ ```python
21
+ # QWebEngineView を継承したサブクラスを作る
22
+
23
+ def contextMenuEvent(self, event):
24
+ menu = self.page().createStandardContextMenu()
25
+
26
+ # ここで QMenu メニューをカスタマイズ
27
+
28
+ menu.exec_(event.globalPos())
29
+
30
+ ```
31
+
20
32
  Context Menu (右クリック時のメニュー) のカスタマイズ方法
21
33
  setContextMenuPolicy により挙動を変更できます。
22
34
 

3

既存のメニューのカスタマイズ方法について、情報更新

2021/05/30 08:03

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -11,10 +11,12 @@
11
11
  > これらのメニューに表示される項目を減らす方法
12
12
  > そしてこれらのメニューに機能を追加することです
13
13
 
14
- C++ であれば、直接既存のメニューを増減してカスタマイズできますが、
14
+ ~~C++ であれば、直接既存のメニューを増減してカスタマイズできますが、
15
15
  Python に提供されてるクラスでは、必要なメソッドが提供されていない為
16
- 右クリック時のイベント自体を捕捉し、独自にメニューを生成する必要がありそうです。
16
+ 右クリック時のイベント自体を捕捉し、独自にメニューを生成する必要がありそうです。~~
17
17
 
18
+ 追記: page().createStandardContextMenu() で可能でした。
19
+
18
20
  Context Menu (右クリック時のメニュー) のカスタマイズ方法
19
21
  setContextMenuPolicy により挙動を変更できます。
20
22
 

2

説明補足

2021/05/30 07:58

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -3,6 +3,7 @@
3
3
  Qt には文字等のリソース翻訳の仕組みがあります。
4
4
  - [Internationalization with Qt](https://doc.qt.io/qt-5/internationalization.html)
5
5
  - メニューのリソース [該当箇所 render_view_context_menu_qt.cpp](https://github.com/qt/qtwebengine/blob/dev/src/core/render_view_context_menu_qt.cpp)
6
+  ※ 翻訳リソース作成の為には、対象文字だけではなく、第一引数のcontext 情報が必要です
6
7
 
7
8
  ![イメージ説明](f225397b200962ef16ef0190b216b398.png)
8
9
 

1

スクリーンショットの更新

2021/05/30 06:14

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  - [Internationalization with Qt](https://doc.qt.io/qt-5/internationalization.html)
5
5
  - メニューのリソース [該当箇所 render_view_context_menu_qt.cpp](https://github.com/qt/qtwebengine/blob/dev/src/core/render_view_context_menu_qt.cpp)
6
6
 
7
- ![イメージ説明](ed4161621145ffefd9a27459774f0828.png)
7
+ ![イメージ説明](f225397b200962ef16ef0190b216b398.png)
8
8
 
9
9
 
10
10
  > これらのメニューに表示される項目を減らす方法