質問編集履歴

3

試したことの内容を変更

2022/08/09 11:22

投稿

intnto
intnto

スコア1

test CHANGED
File without changes
test CHANGED
@@ -138,25 +138,6 @@
138
138
  ```
139
139
 
140
140
  ### 試したこと
141
+ ・グラフ(Graph)またはテキストボックス(TextBar)をSampleクラス内に配置したThreadとtk.Tk.after()により更新していたが、tk.Tk.after()でのみ更新するよう変更しました。
141
- グラフとテキストボッスの数を変更して動作を確認しました。
142
+ グラフ更新のタイミングでカつき、変更前から変化な
142
- 結果は以下となります。
143
143
 
144
- **グラフをafter()で、テキストボックスをThreadで更新させた場合**
145
- |グラフ数|テキストボックス数|動作結果|
146
- |:--|:--:|--:|
147
- |1|1|かくつかない|
148
- |1|10|かくつかない|
149
- |10|1|かくつく|
150
- |10|10|かくつく|
151
-
152
- **グラフをThreadで、テキストボックスをafter()で更新させた場合**
153
- |グラフ数|テキストボックス数|動作結果|
154
- |:--|:--:|--:|
155
- |1|1|かくつかない|
156
- |1|10|かくつかない|
157
- |10|1|かくつく|
158
- |10|10|かくつく|
159
-
160
- ・グラフのx軸とy軸の目盛などを削除して動作を確認しました。
161
- 結果は上記と変わりませんでした。
162
-

2

Sampleクラス内でThreadを使用した画面更新をやめ、tk.Tk.after()内でグラフとテキストボックスの画面更新をするように変更

2022/08/09 11:14

投稿

intnto
intnto

スコア1

test CHANGED
File without changes
test CHANGED
@@ -27,8 +27,6 @@
27
27
  ### 該当のソースコード
28
28
 
29
29
  ```python
30
- from concurrent.futures import ThreadPoolExecutor
31
- from time import sleep
32
30
  import tkinter as tk
33
31
  from tkinter import Text
34
32
  import matplotlib.pyplot as plt
@@ -51,44 +49,24 @@
51
49
  self.__mTxtB = TextBar(self,aTextBarNum)
52
50
 
53
51
  # Threadによる画面更新
54
- self.__mUpdThread = None
55
- self.__mThreadFnc = self.__mGraph.update
56
- self.__mThreadIntvl = 5
52
+ self.__mGraphUpdIntvl = 5000
53
+ self.__mGraphUpdCnt = 0
57
54
 
58
55
  # tk.Tk.after()による画面更新
59
- self.__mAfterFnc = self.__mTxtB.update
60
- self.__mAfterIntvl = 50
56
+ self.__mTextUpdIntvl = 50
61
57
 
62
- def setUpdateMeans(self, aIsAfterGraph):
63
- """_summary_
64
- 更新方法設定
65
- Args:
66
- aIsAfterGraph (bool): True-after()によりグラフを更新する
67
- False-Threadによりグラフを更新する
68
- """
69
- self.__mUpdThread = ThreadPoolExecutor()
70
- if aIsAfterGraph:
71
- self.__mThreadFnc = self.__mTxtB.update
72
- self.__mThreadIntvl = 50/1000
73
- self.__mAfterFnc = self.__mGraph.update
74
- self.__mAfterIntvl = 5000
75
- self.after(self.__mAfterIntvl,self.__AfterFnc)
58
+ self.after(self.__mTextUpdIntvl,self.__AfterFnc)
76
- self.__mUpdThread.submit(self.__ThreadFnc)
77
-
78
- def __ThreadFnc(self):
79
- """_summary_
80
- スレッドによる画面更新
81
- """
82
- while True:
83
- sleep(self.__mThreadIntvl)
84
- self.__mThreadFnc()
85
59
 
86
60
  def __AfterFnc(self):
87
61
  """_summary_
88
62
  after()による画面更新
89
63
  """
90
- self.__mAfterFnc()
64
+ self.__mTxtB.updScreen()
65
+ self.__mGraphUpdCnt = self.__mGraphUpdCnt + self.__mTextUpdIntvl
66
+ if self.__mGraphUpdCnt % self.__mGraphUpdIntvl == 0:
67
+ self.__mGraphUpdCnt = 0
68
+ self.__mGraph.updScreen()
91
- self.after(self.__mAfterIntvl,self.__AfterFnc)
69
+ self.after(self.__mTextUpdIntvl,self.__AfterFnc)
92
70
 
93
71
  class Graph(tk.Frame):
94
72
  """_summary_
@@ -107,7 +85,7 @@
107
85
  self.__mCanvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
108
86
  self.pack()
109
87
 
110
- def update(self):
88
+ def updScreen(self):
111
89
  """_summary_
112
90
  グラフを更新する
113
91
  """
@@ -130,7 +108,7 @@
130
108
 
131
109
  self.__mCanvas.pack()
132
110
 
133
- def update(self):
111
+ def updScreen(self):
134
112
  """_summary_
135
113
  スクロールする
136
114
  """
@@ -148,18 +126,14 @@
148
126
 
149
127
  class Custom_Text(Text):
150
128
  """_summary_
151
- スクロールバー
129
+ テキトボッ
152
130
  """
153
131
  def __init__(self, aX, aY, aMaster=None):
154
132
  Text.__init__(self, aMaster,width=10,height=1,wrap=tk.NONE)
155
133
  self.place(x=aX, y=aY)
156
134
 
157
135
  if __name__ == "__main__":
158
- # グラフを10枚、テキストボックスを10個表示するtkinterオブジェクトを作成
159
136
  tSmpl = Sample(10,10)
160
- # グラフとテキストボックスの更新をafter()とThreadのどちらにするか設定(Trueはグラフをafter()で、テキストボックスをThreadで更新させる)
161
- tSmpl.setUpdateMeans(True)
162
- # 実行
163
137
  tSmpl.mainloop()
164
138
  ```
165
139
 

1

「角つく」を「かくつく」に修正しました

2022/08/09 03:22

投稿

intnto
intnto

スコア1

test CHANGED
@@ -1 +1 @@
1
- tkinterの画面上に表示したグラフを更新するとテキストボックスのスクロールがつく
1
+ tkinterの画面上に表示したグラフを更新するとテキストボックスのスクロールがかくつく
test CHANGED
@@ -17,12 +17,12 @@
17
17
  ・各テキストボックスにそれぞれ異なる1文字以上の文字列を表示する
18
18
  ・テキストボックスは常に一定速度で自動スクロールする
19
19
  ・各グラフは一定時間毎に同じタイミングで画面更新する
20
- という動作をつくことなく実現させたいです。
20
+ という動作をかくつくことなく実現させたいです。
21
21
  可能でしょうか?
22
22
  可能であれば該当のソースコードをどのように修正すればよいか教えてください。
23
23
 
24
24
  ### 発生している問題・エラーメッセージ
25
- グラフが更新するタイミングでテキストボックスのスクロール動作がつきます
25
+ グラフが更新するタイミングでテキストボックスのスクロール動作がかくつきます
26
26
 
27
27
  ### 該当のソースコード
28
28
 
@@ -170,18 +170,18 @@
170
170
  **グラフをafter()で、テキストボックスをThreadで更新させた場合**
171
171
  |グラフ数|テキストボックス数|動作結果|
172
172
  |:--|:--:|--:|
173
- |1|1|つかない|
173
+ |1|1|かくつかない|
174
- |1|10|つかない|
174
+ |1|10|かくつかない|
175
- |10|1|つく|
175
+ |10|1|かくつく|
176
- |10|10|つく|
176
+ |10|10|かくつく|
177
177
 
178
178
  **グラフをThreadで、テキストボックスをafter()で更新させた場合**
179
179
  |グラフ数|テキストボックス数|動作結果|
180
180
  |:--|:--:|--:|
181
- |1|1|つかない|
181
+ |1|1|かくつかない|
182
- |1|10|つかない|
182
+ |1|10|かくつかない|
183
- |10|1|つく|
183
+ |10|1|かくつく|
184
- |10|10|つく|
184
+ |10|10|かくつく|
185
185
 
186
186
  ・グラフのx軸とy軸の目盛などを削除して動作を確認しました。
187
187
  結果は上記と変わりませんでした。