pythonのguiモジュールのtkinterで
フォルダを監視する処理をtkinter.afterを用いて作成しております。
一応、形にできたのですが、一つ懸念材料があります。
プログラムにはあまりglobalを使わない方が良いと聞いたことが御座いまして、
どうにかglobalを使わずに以下の処理を完了したいのですが、
どうにもできません。
具体的に言いますと
今は、global関数に繰り返し回数を示すrepet_numsとafter_idを使っていますが、
これのglobal宣言をせず、def間で変数を渡せる方法はないものかと考えております。
「出来てるからええやん。」と言われればそれまでなのですが、
知識を増やすためにもどうかご教授の程よろしくお願い致します。
<globalを外すと出てくエラーメッセージ>
local variable 'repet_nums' referenced before assignment
とか、
stopボタンが効かなくなる
など
<開発環境>
python3
windows10 64bit
python
1# -*- coding: utf-8 -*- 2""" 3Created on Mon Mar 2 15:00:20 2020 4""" 5 6import tkinter as tk 7 8def main(): 9 Main.convert() 10 11class Main(): 12 def convert(): 13 #after_id = None 14 update_intarval = 1000 #(msec) 15 watch_mode = 1 #監視モード 16 17 def convert_data(): 18 global after_id 19 global repet_nums 20 repet_nums += 1 21 22 for nraw in range(10): 23 pass ## メイン処理 24 25 after_id = showinfo.after(update_intarval, convert_data) 26 if watch_mode == 0: 27 stop_convert() 28 print(repet_nums,after_id) 29 30 def start(): 31 global repet_nums 32 repet_nums = 0 33 convert_data() 34 35 def stop_convert(): 36 global after_id 37 print('push on') 38 print(after_id) 39 if after_id: 40 showinfo.after_cancel(after_id) 41 print(after_id) 42 after_id = None 43 print(after_id) 44 showinfo.destroy() 45 46 showinfo = tk.Tk() 47 frame_bottom = tk.Frame(showinfo,bd=2) 48 frame_bottom.pack(fill="x") 49 50 label2 = tk.Label(frame_bottom, text="STOPボタンで停止 --->") 51 label2.pack(fill="x", padx=10, side="left") 52 53 button1 = tk.Button(frame_bottom, text="STOP", width=15, bg="#f0e68c", fg="#ff0000", command=stop_convert) 54 button1.pack(fill="x", padx=10, side="left") 55 56 start() 57 showinfo.mainloop() 58 59if __name__ == '__main__': 60 main()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/10 02:29