前提・実現したいこと
マイコン+LCDで同様のシステムを作ってみようと思っていますが、部品が届くまでに
pythonで画面の検討をしています。
・"Push"ボタンを押すと変更したいパラメータが切り替わる
・"+"、"-"ボタンを押すと数値を変更できる
・resetボタンで表示している数値を0に戻せる
発生している問題・エラーメッセージ
問題は発生していないのですが初めて作ったアプリで、コードが冗長な気がします。
特にボタンに対応する関数の記述は同じ内容が含まれています。
これからボタンを増やそうと思っているのでコードを綺麗にしたいです。
アドバイスいただけないでしょうか。
該当のソースコード
Python
1import tkinter as tk 2 3root = tk.Tk() 4root.title(u"Selector") 5root.geometry("750x280") 6 7counter = 0 8numA = 0 9numB = 0 10numC = 0 11 12incval = 10 13decval = 10 14 15font_button = ("Helevetica", 10, "bold") 16font_label = ("Helevetica", 30, "bold") 17 18button = tk.Button(font=font_button, text="push") 19resetButton = tk.Button(font=font_button, text="reset") 20incButton = tk.Button(font=font_button, text="+") 21decButton = tk.Button(font=font_button, text="-") 22 23labelResult = tk.Label(root, font=font_label, borderwidth = 10, width = 20, relief="solid", text=u'---') 24labelResult.pack() 25labelResult['text'] = " \n---" 26 27def clicked(): 28 global counter, button, modcounter, mode, s 29 modcounter = counter % 3 30 # print(modcounter) 31 if modcounter == 0: 32 mode = 0 33 s = "A:\n" 34 num = numA 35 elif modcounter == 1: 36 mode = 1 37 s = "B:\n" 38 num = numB 39 elif modcounter == 2: 40 mode = 2 41 s = "C:\n" 42 num = numC 43 else: 44 s = "unknown" 45 labelResult['text'] = s + str(num) 46 counter = counter + 1 47 48def reset(): 49 global mode,numA,numB,numC,resetButton,s 50 if mode == 0: 51 numA = 0 52 labelResult['text'] = s + str(numA) 53 elif mode == 1: 54 numB = 0 55 labelResult['text'] = s + str(numB) 56 elif mode == 2: 57 numC = 0 58 labelResult['text'] = s + str(numC) 59 60def inc(): 61 global mode, numA, numB, numC, s 62 if mode == 0: 63 numA = numA + incval 64 num = numA 65 labelResult['text'] = s + str(num) 66 elif mode == 1: 67 numB = numB + incval 68 num = numB 69 labelResult['text'] = s + str(num) 70 elif mode == 2: 71 numC = numC + incval 72 num = numC 73 labelResult['text'] = s + str(num) 74 75def dec(): 76 global mode, numA, numB, numC, s 77 if mode == 0: 78 numA = numA - decval 79 num = numA 80 labelResult['text'] = s + str(num) 81 elif mode == 1: 82 numB = numB - decval 83 num = numB 84 labelResult['text'] = s + str(num) 85 elif mode == 2: 86 numC = numC - decval 87 num = numC 88 labelResult['text'] = s + str(num) 89 90button.config(command=clicked) 91resetButton.config(command=reset) 92incButton.config(command=inc) 93decButton.config(command=dec) 94 95button.pack(padx = 5, pady = 5, anchor = "e") 96incButton.pack(padx = 5, pady = 5, anchor = "e") 97decButton.pack(padx = 5, pady = 5, anchor = "e") 98resetButton.pack(padx = 5, pady = 5, anchor = "e") 99button.mainloop() 100resetButton.mainloop()
補足情報(FW/ツールのバージョンなど)
Python 3.8.3
Tkinter 8.6
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 10:22