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

回答編集履歴

2

teamiklの指摘あり修正

2020/05/23 06:46

投稿

kotori_a
kotori_a

スコア898

answer CHANGED
@@ -1,25 +1,7 @@
1
+ ※投稿後追記:
1
- ※投稿後追記:上のteamiklさんの回答の方が正確なため、teamiklさんの回答&コードを参考にされた方がよと思います
2
+ 動くコードにはなっていますが、当方の知識不足の点が多々あると思います。上のteamiklさんの回答の方が正確なため、teamiklさんの回答&コードを参考にしてください。
2
3
 
3
- 修正してみました。
4
- ⓵ canvasの追加について、`frame = QWidget(self)` で定義されたframeが最終的にwidgetに配置されていません。
5
-
6
- この部分は
4
+ ① 削除
7
- ```
8
- # 説明に不要な部分は省略しています
9
- def initUI(self):
10
- frame = QWidget(self)
11
- self.canvas = Canvas(frame)
12
-
13
- self.predict_canvas = PredictCanvas(frame)
14
- hbox = QHBoxLayout(frame)
15
- hbox.addWidget(self.canvas)
16
- hbox.addWidget(self.predict_canvas)
17
- hbox.addWidget(tools)
18
- frame.setLayout(hbox)     # ここが必要
19
- return frame
20
- ```
21
- というように、boxレイアウトを登録したwidgetを返してあげる必要があります。
22
-
23
5
  ② PredictCanvasで下記のようにpaintEventを実装してあげないと、描画更新されません。
24
6
 
25
7
  ```
@@ -88,7 +70,7 @@
88
70
  hbox.addWidget(self.predict_canvas)
89
71
  hbox.addWidget(tools)
90
72
 
91
- frame.setLayout(hbox)
73
+ # frame.setLayout(hbox) # 9行目前でQHBoxLayout(frame)というように親を指定しているため不要
92
74
 
93
75
  return frame
94
76
 

1

追記

2020/05/23 06:45

投稿

kotori_a
kotori_a

スコア898

answer CHANGED
@@ -1,9 +1,8 @@
1
- いくつか修すべき点あります。
1
+ ※投稿後追記:上のteamiklさんの回答の方が確なため、teamiklさんの回答&コードを参考にされた方よいと思います。
2
2
 
3
- ## ⓵ Boxレイアウトのウィジェットに対する登録の欠如
3
+ 修正してみました。
4
- canvasの追加について、`frame = QWidget(self)` で定義されたframeが最終的にwidgetに配置されていません。
4
+ canvasの追加について、`frame = QWidget(self)` で定義されたframeが最終的にwidgetに配置されていません。
5
5
 
6
-
7
6
  この部分は
8
7
  ```
9
8
  # 説明に不要な部分は省略しています
@@ -21,8 +20,7 @@
21
20
  ```
22
21
  というように、boxレイアウトを登録したwidgetを返してあげる必要があります。
23
22
 
24
- ## ② PredictCanvasオブジェクトにおける再描画の欠如
25
- PredictCanvasで下記のようにpaintEventを実装してあげないと、描画更新されません。
23
+ PredictCanvasで下記のようにpaintEventを実装してあげないと、描画更新されません。
26
24
 
27
25
  ```
28
26
  def paintEvent(self, event):
@@ -32,8 +30,7 @@
32
30
 
33
31
  ```
34
32
 
35
- ## ③ predict_canvasのコンテキストがオブジェクト間で共有されていない
36
- 元コードでは、ToolFrame(QWidget)で新たにPredictCanvasが生成されてしまっており、メインウィジェットのpredict(predict_canvas)が共有されていません。
33
+ 元コードでは、ToolFrame(QWidget)で新たにPredictCanvasが生成されてしまっており、メインウィジェットのpredict(predict_canvas)が共有されていません。
37
34
 
38
35
  下記のように、メインウィジェットのpredict_canvasをToolFrame(QWidget)が受け取れるように修正する必要があります。
39
36
 
@@ -55,12 +52,7 @@
55
52
  self.predict = canvas # 修正 メインウィジェットのpredict_canvasを受け取る
56
53
  self.initUI()
57
54
  ```
58
-
59
-
60
55
  --------------------------
61
- --------------------------
62
-
63
-
64
56
  以上をまとめた全体コードが、下記のコードです。
65
57
  ```
66
58