🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

600閲覧

Pythonのコードの簡素化

lunacommer

総合スコア6

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/11 06:21

編集2020/12/11 06:42

PythonによるTkinterを使用したプログラムの冗長部の削除

TkinterでGUIを作成しています。
プログラム内容については想定している動作をしています。しかし現在のプログラムは明らかに冗長であるため、簡潔に書きたいです。どのようにすればよいでしょうか。

発生している問題・エラーメッセージ

冗長部の削除

該当のソースコード

Python

1import tkinter as tk 2 3class Application(tk.Frame): 4 5 def __init__(self,master): 6 super().__init__(master) 7 self.pack() 8 9 #ウィンドウサイズ 10 master.geometry("800x200") 11 #ウィンドウタイトル 12 master.title("temp") 13 master.config(bg="white") 14 15 #初期個数 16 self.num=[1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10] 17 self.list=[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4] 18 19 self.var=tk.StringVar() 20 self.var.set("1: "+str('{:.2f}'.format((self.list[0]/len(self.num))*100))+"%") 21 self.var2=tk.StringVar() 22 self.var2.set("2: "+str('{:.2f}'.format((self.list[1]/len(self.num))*100))+"%") 23 self.var3=tk.StringVar() 24 self.var3.set("3: "+str('{:.2f}'.format((self.list[2]/len(self.num))*100))+"%") 25 self.var4=tk.StringVar() 26 self.var4.set("4: "+str('{:.2f}'.format((self.list[3]/len(self.num))*100))+"%") 27 self.var5=tk.StringVar() 28 self.var5.set("5: "+str('{:.2f}'.format((self.list[4]/len(self.num))*100))+"%") 29 self.var6=tk.StringVar() 30 self.var6.set("6: "+str('{:.2f}'.format((self.list[5]/len(self.num))*100))+"%") 31 self.var7=tk.StringVar() 32 self.var7.set("7: "+str('{:.2f}'.format((self.list[6]/len(self.num))*100))+"%") 33 self.var8=tk.StringVar() 34 self.var8.set("8: "+str('{:.2f}'.format((self.list[7]/len(self.num))*100))+"%") 35 self.var9=tk.StringVar() 36 self.var9.set("9: "+str('{:.2f}'.format((self.list[8]/len(self.num))*100))+"%") 37 self.var10=tk.StringVar() 38 self.var10.set("10: "+str('{:.2f}'.format((self.list[9]/len(self.num))*100))+"%") 39 self.var11=tk.StringVar() 40 41 #var.set(1) 42 self.index=[1,2,3,4,5,6,7,8,9,10] 43 #確率載せる場所 44 label_position_x=[] 45 position=60 46 for i in range(13): 47 label_position_x.append(position*(i-1)+position) 48 49 50 self.label1=tk.Label(master,textvariable=self.var).place(x=label_position_x[0], y=5) 51 self.label2=tk.Label(master,textvariable=self.var2).place(x=label_position_x[1], y=5) 52 self.label3=tk.Label(master,textvariable=self.var3).place(x=label_position_x[2], y=5) 53 self.label4=tk.Label(master,textvariable=self.var4).place(x=label_position_x[3], y=5) 54 self.label5=tk.Label(master,textvariable=self.var5).place(x=label_position_x[4], y=5) 55 self.label6=tk.Label(master,textvariable=self.var6).place(x=label_position_x[5], y=5) 56 self.label7=tk.Label(master,textvariable=self.var7).place(x=label_position_x[6], y=5) 57 self.label8=tk.Label(master,textvariable=self.var8).place(x=label_position_x[7], y=5) 58 self.label9=tk.Label(master,textvariable=self.var9).place(x=label_position_x[8], y=5) 59 self.label10=tk.Label(master,textvariable=self.var10).place(x=label_position_x[9], y=5) 60 61 button_place_x=[10,50,90,130,170,210,250,290,330,370,410] 62 button_label=["1","2","3","4","5","6","7","8","9","10"] 63 64 #1 65 tk.Label(master,text=button_label[0]).place(x=button_place_x[0], y=90) 66 tk.Button(master,text="+",command=self.plusButtonClick(self.index[0]),width=3).place(x=button_place_x[0], y=110) 67 #2 68 tk.Label(master,text=button_label[1]).place(x=button_place_x[1], y=90) 69 tk.Button(master,text="+",command=self.plusButtonClick(self.index[1]),width=3).place(x=button_place_x[1], y=110) 70 #3 71 tk.Label(master,text=button_label[2]).place(x=button_place_x[2], y=90) 72 tk.Button(master,text="+",command=self.plusButtonClick(self.index[2]),width=3).place(x=button_place_x[2], y=110) 73 #4 74 tk.Label(master,text=button_label[3]).place(x=button_place_x[3], y=90) 75 tk.Button(master,text="+",command=self.plusButtonClick(self.index[3]),width=3).place(x=button_place_x[3], y=110) 76 #5 77 tk.Label(master,text=button_label[4]).place(x=button_place_x[4], y=90) 78 tk.Button(master,text="+",command=self.plusButtonClick(self.index[4]),width=3).place(x=button_place_x[4], y=110) 79 #6 80 tk.Label(master,text=button_label[5]).place(x=button_place_x[5], y=90) 81 tk.Button(master,text="+",command=self.plusButtonClick(self.index[5]),width=3).place(x=button_place_x[5], y=110) 82 #7 83 tk.Label(master,text=button_label[6]).place(x=button_place_x[6], y=90) 84 tk.Button(master,text="+",command=self.plusButtonClick(self.index[6]),width=3).place(x=button_place_x[6], y=110) 85 #8 86 tk.Label(master,text=button_label[7]).place(x=button_place_x[7], y=90) 87 tk.Button(master,text="+",command=self.plusButtonClick(self.index[7]),width=3).place(x=button_place_x[7], y=110) 88 #9 89 tk.Label(master,text=button_label[8]).place(x=button_place_x[8], y=90) 90 tk.Button(master,text="+",command=self.plusButtonClick(self.index[8]),width=3).place(x=button_place_x[8], y=110) 91 #10 92 tk.Label(master,text=button_label[9]).place(x=button_place_x[9], y=90) 93 tk.Button(master,text="+",command=self.plusButtonClick(self.index[9]),width=3).place(x=button_place_x[9], y=110) 94 95 96 def plusButtonClick(self,index): 97 98 def inner(): 99 self.num.append(index) 100 self.var.set("1: "+str('{:.2f}'.format((self.num.count(1)/len(self.num))*100))+"%") 101 self.var2.set("2: "+str('{:.2f}'.format((self.num.count(2)/len(self.num))*100))+"%") 102 self.var3.set("3: "+str('{:.2f}'.format((self.num.count(3)/len(self.num))*100))+"%") 103 self.var4.set("4: "+str('{:.2f}'.format((self.num.count(4)/len(self.num))*100))+"%") 104 self.var5.set("5: "+str('{:.2f}'.format((self.num.count(5)/len(self.num))*100))+"%") 105 self.var6.set("6: "+str('{:.2f}'.format((self.num.count(6)/len(self.num))*100))+"%") 106 self.var7.set("7: "+str('{:.2f}'.format((self.num.count(7)/len(self.num))*100))+"%") 107 self.var8.set("8: "+str('{:.2f}'.format((self.num.count(8)/len(self.num))*100))+"%") 108 self.var9.set("9: "+str('{:.2f}'.format((self.num.count(9)/len(self.num))*100))+"%") 109 self.var10.set("10: "+str('{:.2f}'.format((self.num.count(10)/len(self.num))*100))+"%") 110 111 return inner 112 113def main(): 114 win = tk.Tk() 115 app = Application(master=win) 116 app.mainloop() 117 118if __name__ == "__main__": 119 main() 120

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずは、self.var というのを配列にしましょう
そしたら、
self.var[n].なんちゃら、で変数与えて共通化できます

投稿2020/12/11 06:25

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lunacommer

2020/12/11 06:47

配列にするということですが、試しに self.var=tk.StringVar() self.var.set("1: "+str('{:.2f}'.format((self.list[0]/len(self.num))*100))+"%") の部分を self.var[0]=tk.StringVar() self.var[0].set("1: "+str('{:.2f}'.format((self.list[0]/len(self.num))*100))+"%") としたところ、 AttributeError: 'Application' object has no attribute 'var' となり、エラーになりました。 初期化の仕方が何かおかしいのでしょうか
y_waiwai

2020/12/11 06:51

self.var=[] としたあとで、要素を追加していきましょう 「python 配列 使い方」でぐぐれば解説出てきます
lunacommer

2020/12/11 07:01

appendをするにしても、setをするにしてもStringVar変数を用いたリストを作成することができません。 お手数ですが、具体的なコードを示してもらうことは可能ですか。
y_waiwai

2020/12/11 07:17

できないとはどういうふうにできないんでしょうか
lunacommer

2020/12/11 07:40

大変申し訳ありません。ケアレスミスでした。 配列化が無事にできました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問