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

質問編集履歴

6

別方法5を追記しました。

2020/08/02 04:51

投稿

dendenmushi
dendenmushi

スコア98

title CHANGED
File without changes
body CHANGED
@@ -233,4 +233,58 @@
233
233
  ![イメージ説明](37333e9aa28db0e3607135d68d6c62cc.jpeg)
234
234
 
235
235
  透過はできるようにはなったようなのですが、その背景に別gifを入れること(まずはバックグラウンドを黒)に挑戦していますが、黒背景もまだでませんしもう少しのようです。
236
- そもそも、黒背景ではなく、もう一つの背景gifじたいもユーザーのアクションによって変えたいので端的に背景に挿入しても変更できないのであれば問題ですが…
236
+ そもそも、黒背景ではなく、もう一つの背景gifじたいもユーザーのアクションによって変えたいので端的に背景に挿入しても変更できないのであれば問題ですが…
237
+
238
+
239
+ 《別方法5》
240
+ ```python
241
+ import wx
242
+
243
+ class Mywin(wx.Frame):
244
+
245
+ def __init__(self, parent, title):
246
+ super(Mywin, self).__init__(parent, title = title,size = (500,300))
247
+ self.InitUI()
248
+
249
+ def InitUI(self):
250
+ self.Bind(wx.EVT_PAINT, self.OnPaint)
251
+ self.Centre()
252
+ self.Show(True)
253
+
254
+ def OnPaint(self, e):
255
+ dc = wx.PaintDC(self)
256
+ brush = wx.Brush("white")
257
+ dc.SetBackground(brush)
258
+ dc.Clear()
259
+
260
+ dc.DrawBitmap(wx.Bitmap("1.png"),10,10,True)
261
+ color = wx.Colour(255,0,0)
262
+ b = wx.Brush(color)
263
+
264
+ dc.DrawBitmap(wx.Bitmap("vqkSsK_Z-0.png"),10,10,True)
265
+ color = wx.Colour(255,0,0)
266
+ b = wx.Brush(color)
267
+
268
+ dc.SetBrush(b)
269
+ dc.DrawCircle(300,125,50)
270
+ dc.SetBrush(wx.Brush(wx.Colour(255,255,255)))
271
+ dc.DrawCircle(300,125,30)
272
+
273
+ font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL)
274
+ dc.SetFont(font)
275
+ dc.DrawText("Hello wxPython",200,10)
276
+
277
+ pen = wx.Pen(wx.Colour(0,0,255))
278
+ dc.SetPen(pen)
279
+ dc.DrawLine(200,50,350,50)
280
+ dc.SetBrush(wx.Brush(wx.Colour(0,255,0), wx.CROSS_HATCH))
281
+ dc.DrawRectangle(380, 15, 90, 60)
282
+
283
+ ex = wx.App()
284
+ Mywin(None,'Drawing demo')
285
+ ex.MainLoop()
286
+ ```
287
+ ![イメージ説明](436ac7e202fe86b2486d5e66c3f318af.jpeg)
288
+
289
+ DrawBitmapというものを使えば重ねて表示ができそうです。ただこの場合ですとgifで対応できないようです。
290
+ 近づいてはいるとは思いますが、引き続きアドバイスよろしくお願い致します。

5

別方法4を追記しました。

2020/08/02 04:51

投稿

dendenmushi
dendenmushi

スコア98

title CHANGED
File without changes
body CHANGED
@@ -191,4 +191,46 @@
191
191
  ![イメージ説明](2041f5634d2dcbf44bc5e56c59d9031f.jpeg)
192
192
 
193
193
 
194
- この方法でも重ねることはできませんでした。
194
+ この方法でも重ねることはできませんでした。
195
+
196
+ 《別方法4》
197
+ ```python
198
+
199
+ import wx
200
+ import wx.adv
201
+
202
+ GIFNames = [
203
+ 'sakura.gif'
204
+ ]
205
+
206
+
207
+ class TestPanel(wx.Panel):
208
+ def __init__(self, parent):
209
+
210
+ wx.Panel.__init__(self, parent, -1)
211
+
212
+ sizer = wx.FlexGridSizer(2,3,5,5)
213
+
214
+ for name in GIFNames:
215
+ ani = wx.adv.Animation(name)
216
+ ctrl = wx.adv.AnimationCtrl(self, -1, ani)
217
+ ctrl.SetBackgroundColour('black')
218
+ ctrl.Play()
219
+
220
+ #sizer.AddF(ctrl, wx.SizerFlags().Border(wx.ALL, 10))
221
+
222
+ border = wx.BoxSizer()
223
+ #border.AddF(sizer, wx.SizerFlags(1).Expand().Border(wx.ALL, 20))
224
+ self.SetSizer(border)
225
+
226
+ app = wx.App()
227
+ frame = wx.Frame(None)
228
+ panel = TestPanel(frame)
229
+ frame.Show()
230
+ app.MainLoop()
231
+ ```
232
+ ![イメージ説明](6173543c93166fea5b596c5f05835ce4.gif)
233
+ ![イメージ説明](37333e9aa28db0e3607135d68d6c62cc.jpeg)
234
+
235
+ 透過はできるようにはなったようなのですが、その背景に別gifを入れること(まずはバックグラウンドを黒)に挑戦していますが、黒背景もまだでませんしもう少しのようです。
236
+ そもそも、黒背景ではなく、もう一つの背景gifじたいもユーザーのアクションによって変えたいので端的に背景に挿入しても変更できないのであれば問題ですが…

4

別方法3追記

2020/08/02 01:15

投稿

dendenmushi
dendenmushi

スコア98

title CHANGED
File without changes
body CHANGED
@@ -121,6 +121,7 @@
121
121
 
122
122
  ### 追記 2020/08/02
123
123
  以下など試してみました。
124
+ 《別方法1》
124
125
  ```python
125
126
  class MainWindow(wx.Frame):
126
127
  def __init__(self, parent=None, ID=wx.ID_ANY, title="", *args, **kw):
@@ -139,7 +140,7 @@
139
140
  def feature_method(self, event):
140
141
  wx.MessageBox('正解です!')
141
142
  ```
142
-
143
+ 《別方法2》
143
144
  ```python
144
145
  def main():
145
146
  app = wx.App()
@@ -153,4 +154,41 @@
153
154
  win_sub.Centre()
154
155
  win_sub.Show()
155
156
  ```
156
- SubWindowクラスを作るなど試行錯誤しましたが同時に表示はできませんでした。
157
+ SubWindowクラスを作るなど試行錯誤しましたが同時に表示はできませんでした。
158
+
159
+ 《別方法3》
160
+ ```python
161
+ import wx
162
+ import wx.adv
163
+
164
+ class BG(object):#背景の表示
165
+ def __init__(self, MainPanel,x,y):
166
+ BGimg =wx.Image("1.png")
167
+ self.bitmap = BGimg.ConvertToBitmap()
168
+ wx.StaticBitmap(MainPanel, -1, self.bitmap, (x,y))
169
+
170
+ class MyWindow(wx.Frame):
171
+ def __init__(self, parent=None, id=-1, title=None):
172
+ wx.Frame.__init__(self, parent, id, title)
173
+ self.MainPanel = wx.Panel(self, size=(1200, 800))#メイン画面の大きさ
174
+ self.MainPanel.SetBackgroundColour("Black")
175
+ self.BackG = BG(self.MainPanel, 0, 0)
176
+ self.anime = wx.Panel(self.MainPanel, pos=(350, 0), size=(450, 800),
177
+ style=wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
178
+ self.file = "sakura.gif"
179
+ self.ani = wx.adv.Animation(self.file)
180
+ self.ctrl = wx.adv.AnimationCtrl(self.anime, -1, self.ani, pos=(10, 10), style=wx.TRANSPARENT)
181
+ self.ctrl.Play()
182
+ self.Fit()
183
+
184
+ if __name__ == "__main__":
185
+ app = wx.App()
186
+ w = MyWindow(title="test")
187
+ w.Center
188
+ w.Show()
189
+ app.MainLoop()
190
+ ```
191
+ ![イメージ説明](2041f5634d2dcbf44bc5e56c59d9031f.jpeg)
192
+
193
+
194
+ この方法でも重ねることはできませんでした。

3

過去teratailの同種の質問のURLを参考サイト一覧へ追記

2020/08/01 23:59

投稿

dendenmushi
dendenmushi

スコア98

title CHANGED
File without changes
body CHANGED
@@ -108,6 +108,7 @@
108
108
  [透過pngをgif動画にするサイト](https://ao-system.net/gifanima/)
109
109
  [アニメーションについて調べたサイト](https://stackoverrun.com/ja/q/10440993)
110
110
  [アニメーションについて調べたサイト2](http://ja.pymotw.com/2/sched/)
111
+ [過去teratailでの似ている質問(透過gif)](https://teratail.com/questions/172247)
111
112
 
112
113
  2つのgifを重ねて一枚一枚保存したものをgifにしてそれを1つのイベントで実行という方法がありますが、
113
114
  私は、あるイベント発生(クリックなど)によって一枚だけのレイヤーに存在する透過gifを他のものに変えたり最終的にはしたいため、イベント自体を2個同時に実行するのがよいと考えております。そもそもイベントを重ねてgifを表示することじたいが調べているのですがでてこなく、知見ある方何かアドバイス頂けないでしょうか。

2

feature_method記載漏れのため修正

2020/08/01 22:05

投稿

dendenmushi
dendenmushi

スコア98

title CHANGED
File without changes
body CHANGED
@@ -134,6 +134,9 @@
134
134
  feature_button.Bind(wx.EVT_BUTTON, self.feature_method)
135
135
  v_layout.Add(feature_button, proportion=0, flag=wx.ALIGN_CENTER_HORIZONTAL)
136
136
  panel1.SetSizer(v_layout)
137
+
138
+ def feature_method(self, event):
139
+ wx.MessageBox('正解です!')
137
140
  ```
138
141
 
139
142
  ```python

1

試したこと記載漏れ

2020/08/01 21:47

投稿

dendenmushi
dendenmushi

スコア98

title CHANGED
File without changes
body CHANGED
@@ -116,4 +116,37 @@
116
116
  ### 補足情報(FW/ツールのバージョンなど)
117
117
  win10
118
118
  python3.7
119
- wxpython
119
+ wxpython
120
+
121
+ ### 追記 2020/08/02
122
+ 以下など試してみました。
123
+ ```python
124
+ class MainWindow(wx.Frame):
125
+ def __init__(self, parent=None, ID=wx.ID_ANY, title="", *args, **kw):
126
+ super().__init__(parent, ID, title, *args, **kw)
127
+ self.animeCtrl = AnimationCtrl(self)
128
+
129
+ # 20200801 add
130
+ panel1 = wx.Panel(self, wx.ID_ANY)
131
+ v_layout = wx.BoxSizer(wx.VERTICAL)
132
+ # ButtonA
133
+ feature_button = wx.Button(panel1, wx.ID_ANY, "Feature")
134
+ feature_button.Bind(wx.EVT_BUTTON, self.feature_method)
135
+ v_layout.Add(feature_button, proportion=0, flag=wx.ALIGN_CENTER_HORIZONTAL)
136
+ panel1.SetSizer(v_layout)
137
+ ```
138
+
139
+ ```python
140
+ def main():
141
+ app = wx.App()
142
+ win = MainWindow()
143
+ win.SetSize(800, 800)
144
+ win.Centre()
145
+ win.Show()
146
+ # 20200801 add
147
+ win_sub = SubWindow()
148
+ win_sub.SetSize(800, 800)
149
+ win_sub.Centre()
150
+ win_sub.Show()
151
+ ```
152
+ SubWindowクラスを作るなど試行錯誤しましたが同時に表示はできませんでした。