以下Pythonのコードは 同じ環境にimagesフォルダがありこの中に二つのGIFファイル(taiko-bs.gifとpart21.gif)があることを前提とした作りになっています。(それさえあれば 開発環境がございましたら 動作を確認頂けます)
こちらのサイトでご支援を頂きましたこともあり、一つのGIFアニメーションについて、動作画像を表示できる状態となったのですが
なんとか 確認ダイアログの応答結果を受けて GIFアニメーションの切り替えを達成したいと考えています。
確認ダイアログ部分、自分なりにチャレンジしましたが、ダイアログに応答したあと GIFアニメーションが表示されない事象を招いています。
どういった対策を施せば 目的が達成されるでしょうか?
何から何まですみません、差し支えなければ ご教示をお願い致します。
Python
1from tkinter import * 2import tkinter.ttk as ttk 3import tkinter.scrolledtext as tksc 4import tkinter.messagebox as tkmb 5import math 6 7class Apprication(ttk.Frame): 8 9 10 11 def __init__(self, app): 12 13 14 super().__init__(app) 15 self.pack(fill=BOTH, expand=True) 16 17 18 photo = PhotoImage(file="images\part21.gif") 19 20 21 btn1 = ttk.Button(self, text="Sub") 22 btn1.pack(fill=BOTH, expand=True) 23 btn1.focus_set() 24 25 btn2 = ttk.Button(self, text="Quit", command=app.quit) 26 btn2.bind('<Return>', lambda _: app.quit()) 27 btn2.pack(fill=BOTH, expand=True) 28 29 30 lb1 =Label(self, bg="#FFFFFF", image=photo, relief="sunken", borderwidth=3, takefocus=1) 31 lb1.pack(fill = BOTH, expand=True) 32 lb1.focus_set() 33 34 35 if tkmb.askyesno("確認","スケジュールを動作させますか?"): 36 photo = PhotoImage(file="images\taiko-bs.gif") 37 38 self.menu() 39 40 41 42 def menu(self): 43 menu_top = Menu(app) 44 menu_file = Menu(menu_top, tearoff=False) 45 menu_open = Menu(menu_top, tearoff=False) 46 47 app.configure(menu=menu_top, bg="#F0FFFF") 48 49 menu_top.add_cascade (label='File(F)', menu=menu_file, underline=0) 50 51 menu_file.add_cascade(label='Open(O)', underline=0, menu=menu_open) 52 menu_open.add_command(label='Sub(S)', underline=0) 53 menu_file.add_command(label='Quit(Q)',underline=0, command=app.quit) 54 55 56 57 # 子画面閉じる 58 def closeDialog(self): 59 self.dialog.destroy() 60 61 62 63if __name__ == '__main__': 64 65 66 #*********************************** 67 def next_frame(): 68 global gif_index 69 try: 70 # XXX: 次のフレームに移る 71 photo.configure(format="gif -index {}".format(gif_index)) 72 73 gif_index += 1 74 except TclError: 75 gif_index = 0 76 return next_frame() 77 else: 78 app.after(100, next_frame) # XXX: アニメーション速度が固定 79 #*********************************** 80 81 82 83 #世間でいうrootをappとしています 84 app = Tk() 85 86 87 #*********************************** 88 photo = PhotoImage(file="images\part21.gif") 89 gif_index = 0 90 #*********************************** 91 92 93 94 95 #実行端末の画面サイズを取得 96 ww = app.winfo_screenwidth() 97 wh = app.winfo_screenheight() 98 99 app.update_idletasks() 100 101 #フォームサイズを実行端末から導き、ド真中に配置表示 102 lw = math.ceil(ww * 0.208) 103 lh = math.ceil(wh * 0.277) 104 app.geometry(str(lw)+"x"+str(lh)+"+"+str(int(ww/2-lw/2))+"+"+str(int(wh/2-lh/2)) ) 105 106 #タイトルを指定 107 app.title("Main Menu") 108 109 #フォームの最大化、×ボタン操作を無効化 110 app.resizable(0,0) 111 app.protocol('WM_DELETE_WINDOW', (lambda: 'pass')()) 112 113 114 115 menu_top = Menu(app) 116 menu_file = Menu(menu_top, tearoff=False) 117 menu_open = Menu(menu_top, tearoff=False) 118 119 app.configure(menu=menu_top, bg="#F0FFFF") 120 121 menu_top.add_cascade (label='File(F)', menu=menu_file, underline=0) 122 123 menu_file.add_cascade(label='Open(O)', underline=0, menu=menu_open) 124 menu_open.add_command(label='Sub(S)', underline=0) 125 menu_file.add_command(label='Quit(Q)',underline=0, command=app.quit) 126 127 128 # フレームを作成する 129 frame = Apprication(app) 130 131 132 #*********************************** 133 app.after_idle(next_frame) 134 #*********************************** 135 136 137 # 格納したTkインスタンスのmainloopで画面を起こす 138 app.mainloop() 139
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/18 08:52
2020/06/18 15:32
2020/06/18 16:30
2020/06/18 23:31
2020/06/19 00:29
2020/07/04 13:51
2020/07/04 18:35
2020/07/04 22:52
2020/07/04 23:27
2020/07/05 00:14
2020/07/05 08:08 編集
2020/07/05 22:54