質問編集履歴
6
別方法5を追記しました。
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を追記しました。
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追記
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を参考サイト一覧へ追記
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記載漏れのため修正
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
試したこと記載漏れ
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クラスを作るなど試行錯誤しましたが同時に表示はできませんでした。
|