回答編集履歴

8

書式の修正

2021/05/31 13:59

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -70,6 +70,8 @@
70
70
 
71
71
 
72
72
 
73
+ ----
74
+
73
75
 
74
76
 
75
77
  > これらのメニューに表示される項目を減らす方法

7

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

2021/05/31 13:59

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -18,6 +18,60 @@
18
18
 
19
19
 
20
20
 
21
+ 追記: .ts ファイルのサンプル
22
+
23
+ ```xml
24
+
25
+ <?xml version="1.0" encoding="utf-8"?>
26
+
27
+ <!DOCTYPE TS>
28
+
29
+ <TS version="2.1" language="ja">
30
+
31
+ <context>
32
+
33
+ <name>RenderViewContextMenuQt</name>
34
+
35
+ <message>
36
+
37
+ <source>Forward</source>
38
+
39
+ <translation>進む</translation>
40
+
41
+ </message>
42
+
43
+ <message>
44
+
45
+ <source>Back</source>
46
+
47
+ <translation>戻る</translation>
48
+
49
+ </message>
50
+
51
+ </context>
52
+
53
+ </TS>
54
+
55
+ ```
56
+
57
+
58
+
59
+ 手順
60
+
61
+ - 上記のXMLを拡張子 .ts で保存します。文字コードは utf-8
62
+
63
+ - 他の文字の翻訳は、サンプルを参考に `<message>` を増やしてください。
64
+
65
+ - lrelease コマンドで .ts ファイルから .qm ファイルを生成
66
+
67
+  ※ ない場合は、Qt 開発環境のインストールが必要
68
+
69
+ - `translater.load` で .qm ファイルを読み込む
70
+
71
+
72
+
73
+
74
+
21
75
  > これらのメニューに表示される項目を減らす方法
22
76
 
23
77
  > そしてこれらのメニューに機能を追加することです

6

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

2021/05/31 13:59

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -38,6 +38,36 @@
38
38
 
39
39
  ```python
40
40
 
41
+
42
+
43
+ import sys
44
+
45
+ from PyQt5.QtCore import Qt, QUrl
46
+
47
+ from PyQt5.QtWidgets import (
48
+
49
+ QApplication,
50
+
51
+ QMainWindow,
52
+
53
+ QMessageBox,
54
+
55
+ QAction,
56
+
57
+ QMenu,
58
+
59
+ )
60
+
61
+ from PyQt5.QtWebEngineWidgets import (
62
+
63
+ QWebEngineView,
64
+
65
+ QWebEnginePage,
66
+
67
+ )
68
+
69
+
70
+
41
71
  ## 方法1 contextMenuEvent
42
72
 
43
73
  # QWebEngineView を継承したサブクラスを作る
@@ -48,6 +78,12 @@
48
78
 
49
79
 
50
80
 
81
+ def showTestDialog(self):
82
+
83
+ QMessageBox.information(self, "Test", f"test action was called")
84
+
85
+
86
+
51
87
  def contextMenuEvent(self, event):
52
88
 
53
89
  ## 既存のメニューをカスタマイズする場合
@@ -58,6 +94,16 @@
58
94
 
59
95
  # ここで QMenu メニューをカスタマイズ
60
96
 
97
+ menu.addSeparator()
98
+
99
+
100
+
101
+ action = QAction("Test")
102
+
103
+ action.triggered.connect(self.showTestDialog)
104
+
105
+ menu.addAction(action)
106
+
61
107
 
62
108
 
63
109
  menu.aboutToHide.connect(menu.deleteLater)
@@ -68,17 +114,19 @@
68
114
 
69
115
 
70
116
 
71
- ## 方法2 CustomContextMenu
117
+ ## 方法2 CustomContextMenu
72
-
73
-
74
-
118
+
119
+
120
+
75
- ...
121
+ def createWebView(parent):
122
+
123
+ view = QWebEngineView(parent)
76
124
 
77
125
 
78
126
 
79
127
  def saveLink():
80
128
 
81
- print("Save Link")
129
+ # 既存のメニューの機能を呼び出し
82
130
 
83
131
  view.triggerPageAction(
84
132
 
@@ -88,12 +136,14 @@
88
136
 
89
137
  def customContextMenuRequested(pos):
90
138
 
91
- ## 新規にメニューを作る
139
+ ## 新規にメニューを作る場合
92
140
 
93
141
  menu = QMenu(view)
94
142
 
95
143
 
96
144
 
145
+ # ここで QMenu メニューをカスタマイズ
146
+
97
147
  action = QAction("Save Link")
98
148
 
99
149
  action.triggered.connect(saveLink)
@@ -108,12 +158,52 @@
108
158
 
109
159
 
110
160
 
161
+ # カスタムメニューの為の設定
162
+
111
163
  view.setContextMenuPolicy(Qt.CustomContextMenu)
112
164
 
113
165
  view.customContextMenuRequested.connect(customContextMenuRequested)
114
166
 
115
167
 
116
168
 
169
+ return view
170
+
171
+
172
+
173
+
174
+
175
+ def main():
176
+
177
+ app = QApplication(sys.argv)
178
+
179
+ win = QMainWindow()
180
+
181
+ view = MyWebEngineView(win)
182
+
183
+ # view = createWebView(win)
184
+
185
+
186
+
187
+ view.setUrl(QUrl("https://www.google.com/"))
188
+
189
+ win.setCentralWidget(view)
190
+
191
+ win.resize(600, 600)
192
+
193
+ win.show()
194
+
195
+ sys.exit(app.exec_())
196
+
197
+
198
+
199
+
200
+
201
+ if __name__ == '__main__':
202
+
203
+ main()
204
+
205
+
206
+
117
207
  ```
118
208
 
119
209
 

5

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

2021/05/31 02:16

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -38,11 +38,19 @@
38
38
 
39
39
  ```python
40
40
 
41
+ ## 方法1 contextMenuEvent
42
+
41
43
  # QWebEngineView を継承したサブクラスを作る
42
44
 
43
45
 
44
46
 
47
+ class MyWebEngineView(QWebEngineView):
48
+
49
+
50
+
45
51
  def contextMenuEvent(self, event):
52
+
53
+ ## 既存のメニューをカスタマイズする場合
46
54
 
47
55
  menu = self.page().createStandardContextMenu()
48
56
 
@@ -52,7 +60,57 @@
52
60
 
53
61
 
54
62
 
63
+ menu.aboutToHide.connect(menu.deleteLater)
64
+
55
65
  menu.exec_(event.globalPos())
66
+
67
+
68
+
69
+
70
+
71
+ ## 方法2 CustomContextMenu
72
+
73
+
74
+
75
+ ... 略
76
+
77
+
78
+
79
+ def saveLink():
80
+
81
+ print("Save Link")
82
+
83
+ view.triggerPageAction(
84
+
85
+ QWebEnginePage.CopyLinkToClipboard)
86
+
87
+
88
+
89
+ def customContextMenuRequested(pos):
90
+
91
+ ## 新規にメニューを作る
92
+
93
+ menu = QMenu(view)
94
+
95
+
96
+
97
+ action = QAction("Save Link")
98
+
99
+ action.triggered.connect(saveLink)
100
+
101
+ menu.addAction(action)
102
+
103
+
104
+
105
+ menu.aboutToHide.connect(menu.deleteLater)
106
+
107
+ menu.exec_(view.mapToGlobal(pos))
108
+
109
+
110
+
111
+ view.setContextMenuPolicy(Qt.CustomContextMenu)
112
+
113
+ view.customContextMenuRequested.connect(customContextMenuRequested)
56
114
 
57
115
 
58
116
 

4

コード追記

2021/05/30 12:14

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -33,6 +33,30 @@
33
33
 
34
34
 
35
35
  追記: page().createStandardContextMenu() で可能でした。
36
+
37
+
38
+
39
+ ```python
40
+
41
+ # QWebEngineView を継承したサブクラスを作る
42
+
43
+
44
+
45
+ def contextMenuEvent(self, event):
46
+
47
+ menu = self.page().createStandardContextMenu()
48
+
49
+
50
+
51
+ # ここで QMenu メニューをカスタマイズ
52
+
53
+
54
+
55
+ menu.exec_(event.globalPos())
56
+
57
+
58
+
59
+ ```
36
60
 
37
61
 
38
62
 

3

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

2021/05/30 08:03

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -24,11 +24,15 @@
24
24
 
25
25
 
26
26
 
27
- C++ であれば、直接既存のメニューを増減してカスタマイズできますが、
27
+ ~~C++ であれば、直接既存のメニューを増減してカスタマイズできますが、
28
28
 
29
29
  Python に提供されてるクラスでは、必要なメソッドが提供されていない為
30
30
 
31
- 右クリック時のイベント自体を捕捉し、独自にメニューを生成する必要がありそうです。
31
+ 右クリック時のイベント自体を捕捉し、独自にメニューを生成する必要がありそうです。~~
32
+
33
+
34
+
35
+ 追記: page().createStandardContextMenu() で可能でした。
32
36
 
33
37
 
34
38
 

2

説明補足

2021/05/30 07:58

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -7,6 +7,8 @@
7
7
  - [Internationalization with Qt](https://doc.qt.io/qt-5/internationalization.html)
8
8
 
9
9
  - メニューのリソース [該当箇所 render_view_context_menu_qt.cpp](https://github.com/qt/qtwebengine/blob/dev/src/core/render_view_context_menu_qt.cpp)
10
+
11
+  ※ 翻訳リソース作成の為には、対象文字だけではなく、第一引数のcontext 情報が必要です
10
12
 
11
13
 
12
14
 

1

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

2021/05/30 06:14

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- ![イメージ説明](ed4161621145ffefd9a27459774f0828.png)
13
+ ![イメージ説明](f225397b200962ef16ef0190b216b398.png)
14
14
 
15
15
 
16
16