質問編集履歴

6

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

2020/08/02 04:51

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -469,3 +469,111 @@
469
469
  透過はできるようにはなったようなのですが、その背景に別gifを入れること(まずはバックグラウンドを黒)に挑戦していますが、黒背景もまだでませんしもう少しのようです。
470
470
 
471
471
  そもそも、黒背景ではなく、もう一つの背景gifじたいもユーザーのアクションによって変えたいので端的に背景に挿入しても変更できないのであれば問題ですが…
472
+
473
+
474
+
475
+
476
+
477
+ 《別方法5》
478
+
479
+ ```python
480
+
481
+ import wx
482
+
483
+
484
+
485
+ class Mywin(wx.Frame):
486
+
487
+
488
+
489
+ def __init__(self, parent, title):
490
+
491
+ super(Mywin, self).__init__(parent, title = title,size = (500,300))
492
+
493
+ self.InitUI()
494
+
495
+
496
+
497
+ def InitUI(self):
498
+
499
+ self.Bind(wx.EVT_PAINT, self.OnPaint)
500
+
501
+ self.Centre()
502
+
503
+ self.Show(True)
504
+
505
+
506
+
507
+ def OnPaint(self, e):
508
+
509
+ dc = wx.PaintDC(self)
510
+
511
+ brush = wx.Brush("white")
512
+
513
+ dc.SetBackground(brush)
514
+
515
+ dc.Clear()
516
+
517
+
518
+
519
+ dc.DrawBitmap(wx.Bitmap("1.png"),10,10,True)
520
+
521
+ color = wx.Colour(255,0,0)
522
+
523
+ b = wx.Brush(color)
524
+
525
+
526
+
527
+ dc.DrawBitmap(wx.Bitmap("vqkSsK_Z-0.png"),10,10,True)
528
+
529
+ color = wx.Colour(255,0,0)
530
+
531
+ b = wx.Brush(color)
532
+
533
+
534
+
535
+ dc.SetBrush(b)
536
+
537
+ dc.DrawCircle(300,125,50)
538
+
539
+ dc.SetBrush(wx.Brush(wx.Colour(255,255,255)))
540
+
541
+ dc.DrawCircle(300,125,30)
542
+
543
+
544
+
545
+ font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL)
546
+
547
+ dc.SetFont(font)
548
+
549
+ dc.DrawText("Hello wxPython",200,10)
550
+
551
+
552
+
553
+ pen = wx.Pen(wx.Colour(0,0,255))
554
+
555
+ dc.SetPen(pen)
556
+
557
+ dc.DrawLine(200,50,350,50)
558
+
559
+ dc.SetBrush(wx.Brush(wx.Colour(0,255,0), wx.CROSS_HATCH))
560
+
561
+ dc.DrawRectangle(380, 15, 90, 60)
562
+
563
+
564
+
565
+ ex = wx.App()
566
+
567
+ Mywin(None,'Drawing demo')
568
+
569
+ ex.MainLoop()
570
+
571
+ ```
572
+
573
+ ![イメージ説明](436ac7e202fe86b2486d5e66c3f318af.jpeg)
574
+
575
+
576
+
577
+ DrawBitmapというものを使えば重ねて表示ができそうです。ただこの場合ですとgifで対応できないようです。
578
+
579
+ 近づいてはいるとは思いますが、引き続きアドバイスよろしくお願い致します。

5

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

2020/08/02 04:51

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -385,3 +385,87 @@
385
385
 
386
386
 
387
387
  この方法でも重ねることはできませんでした。
388
+
389
+
390
+
391
+ 《別方法4》
392
+
393
+ ```python
394
+
395
+
396
+
397
+ import wx
398
+
399
+ import wx.adv
400
+
401
+
402
+
403
+ GIFNames = [
404
+
405
+ 'sakura.gif'
406
+
407
+ ]
408
+
409
+
410
+
411
+
412
+
413
+ class TestPanel(wx.Panel):
414
+
415
+ def __init__(self, parent):
416
+
417
+
418
+
419
+ wx.Panel.__init__(self, parent, -1)
420
+
421
+
422
+
423
+ sizer = wx.FlexGridSizer(2,3,5,5)
424
+
425
+
426
+
427
+ for name in GIFNames:
428
+
429
+ ani = wx.adv.Animation(name)
430
+
431
+ ctrl = wx.adv.AnimationCtrl(self, -1, ani)
432
+
433
+ ctrl.SetBackgroundColour('black')
434
+
435
+ ctrl.Play()
436
+
437
+
438
+
439
+ #sizer.AddF(ctrl, wx.SizerFlags().Border(wx.ALL, 10))
440
+
441
+
442
+
443
+ border = wx.BoxSizer()
444
+
445
+ #border.AddF(sizer, wx.SizerFlags(1).Expand().Border(wx.ALL, 20))
446
+
447
+ self.SetSizer(border)
448
+
449
+
450
+
451
+ app = wx.App()
452
+
453
+ frame = wx.Frame(None)
454
+
455
+ panel = TestPanel(frame)
456
+
457
+ frame.Show()
458
+
459
+ app.MainLoop()
460
+
461
+ ```
462
+
463
+ ![イメージ説明](6173543c93166fea5b596c5f05835ce4.gif)
464
+
465
+ ![イメージ説明](37333e9aa28db0e3607135d68d6c62cc.jpeg)
466
+
467
+
468
+
469
+ 透過はできるようにはなったようなのですが、その背景に別gifを入れること(まずはバックグラウンドを黒)に挑戦していますが、黒背景もまだでませんしもう少しのようです。
470
+
471
+ そもそも、黒背景ではなく、もう一つの背景gifじたいもユーザーのアクションによって変えたいので端的に背景に挿入しても変更できないのであれば問題ですが…

4

別方法3追記

2020/08/02 01:15

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -244,6 +244,8 @@
244
244
 
245
245
  以下など試してみました。
246
246
 
247
+ 《別方法1》
248
+
247
249
  ```python
248
250
 
249
251
  class MainWindow(wx.Frame):
@@ -280,7 +282,7 @@
280
282
 
281
283
  ```
282
284
 
283
-
285
+ 《別方法2》
284
286
 
285
287
  ```python
286
288
 
@@ -309,3 +311,77 @@
309
311
  ```
310
312
 
311
313
  SubWindowクラスを作るなど試行錯誤しましたが同時に表示はできませんでした。
314
+
315
+
316
+
317
+ 《別方法3》
318
+
319
+ ```python
320
+
321
+ import wx
322
+
323
+ import wx.adv
324
+
325
+
326
+
327
+ class BG(object):#背景の表示
328
+
329
+ def __init__(self, MainPanel,x,y):
330
+
331
+ BGimg =wx.Image("1.png")
332
+
333
+ self.bitmap = BGimg.ConvertToBitmap()
334
+
335
+ wx.StaticBitmap(MainPanel, -1, self.bitmap, (x,y))
336
+
337
+
338
+
339
+ class MyWindow(wx.Frame):
340
+
341
+ def __init__(self, parent=None, id=-1, title=None):
342
+
343
+ wx.Frame.__init__(self, parent, id, title)
344
+
345
+ self.MainPanel = wx.Panel(self, size=(1200, 800))#メイン画面の大きさ
346
+
347
+ self.MainPanel.SetBackgroundColour("Black")
348
+
349
+ self.BackG = BG(self.MainPanel, 0, 0)
350
+
351
+ self.anime = wx.Panel(self.MainPanel, pos=(350, 0), size=(450, 800),
352
+
353
+ style=wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)
354
+
355
+ self.file = "sakura.gif"
356
+
357
+ self.ani = wx.adv.Animation(self.file)
358
+
359
+ self.ctrl = wx.adv.AnimationCtrl(self.anime, -1, self.ani, pos=(10, 10), style=wx.TRANSPARENT)
360
+
361
+ self.ctrl.Play()
362
+
363
+ self.Fit()
364
+
365
+
366
+
367
+ if __name__ == "__main__":
368
+
369
+ app = wx.App()
370
+
371
+ w = MyWindow(title="test")
372
+
373
+ w.Center
374
+
375
+ w.Show()
376
+
377
+ app.MainLoop()
378
+
379
+ ```
380
+
381
+ ![イメージ説明](2041f5634d2dcbf44bc5e56c59d9031f.jpeg)
382
+
383
+
384
+
385
+
386
+
387
+ この方法でも重ねることはできませんでした。

3

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

2020/08/01 23:59

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -218,6 +218,8 @@
218
218
 
219
219
  [アニメーションについて調べたサイト2](http://ja.pymotw.com/2/sched/)
220
220
 
221
+ [過去teratailでの似ている質問(透過gif)](https://teratail.com/questions/172247)
222
+
221
223
 
222
224
 
223
225
  2つのgifを重ねて一枚一枚保存したものをgifにしてそれを1つのイベントで実行という方法がありますが、

2

feature_method記載漏れのため修正

2020/08/01 22:05

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -270,6 +270,12 @@
270
270
 
271
271
  panel1.SetSizer(v_layout)
272
272
 
273
+
274
+
275
+ def feature_method(self, event):
276
+
277
+ wx.MessageBox('正解です!')
278
+
273
279
  ```
274
280
 
275
281
 

1

試したこと記載漏れ

2020/08/01 21:47

投稿

dendenmushi
dendenmushi

スコア98

test CHANGED
File without changes
test CHANGED
@@ -235,3 +235,69 @@
235
235
  python3.7
236
236
 
237
237
  wxpython
238
+
239
+
240
+
241
+ ### 追記 2020/08/02
242
+
243
+ 以下など試してみました。
244
+
245
+ ```python
246
+
247
+ class MainWindow(wx.Frame):
248
+
249
+ def __init__(self, parent=None, ID=wx.ID_ANY, title="", *args, **kw):
250
+
251
+ super().__init__(parent, ID, title, *args, **kw)
252
+
253
+ self.animeCtrl = AnimationCtrl(self)
254
+
255
+
256
+
257
+ # 20200801 add
258
+
259
+ panel1 = wx.Panel(self, wx.ID_ANY)
260
+
261
+ v_layout = wx.BoxSizer(wx.VERTICAL)
262
+
263
+ # ButtonA
264
+
265
+ feature_button = wx.Button(panel1, wx.ID_ANY, "Feature")
266
+
267
+ feature_button.Bind(wx.EVT_BUTTON, self.feature_method)
268
+
269
+ v_layout.Add(feature_button, proportion=0, flag=wx.ALIGN_CENTER_HORIZONTAL)
270
+
271
+ panel1.SetSizer(v_layout)
272
+
273
+ ```
274
+
275
+
276
+
277
+ ```python
278
+
279
+ def main():
280
+
281
+ app = wx.App()
282
+
283
+ win = MainWindow()
284
+
285
+ win.SetSize(800, 800)
286
+
287
+ win.Centre()
288
+
289
+ win.Show()
290
+
291
+ # 20200801 add
292
+
293
+ win_sub = SubWindow()
294
+
295
+ win_sub.SetSize(800, 800)
296
+
297
+ win_sub.Centre()
298
+
299
+ win_sub.Show()
300
+
301
+ ```
302
+
303
+ SubWindowクラスを作るなど試行錯誤しましたが同時に表示はできませんでした。