・現在、私はpythonのtkinterを使って、いつどこで何をしたかみたいなのをランダムで選んで表示するプログラムを作ろうとしています。
・自分の認識が間違っているかもしれないんですけどこういうプログラムって上から下をグルグルとループしていると思ってるんですけど、そのせいかインスタンスを生成するたびにwhen=""が呼び出されて初期化されている気がするんですよ。だからprintでwhenを出力すると中身がちゃんと入っていて、labelのtextとして出力すると空になってしまいます。
・こういうときってどうすればよろしいのでしょうか?
python
1#GUIに関するやつ 2from tkinter import * 3#randomとかやるやつ 4from tkinter import ttk 5import random 6 7class Word: 8 9 #ここが原因な気がする? 10 when="" 11 where="" 12 who="" 13 with_who="" 14 how="" 15 do="" 16 17 when_list = [ 18 #省略 19 ] 20 21 where_list = [ 22 #省略 23 ] 24 25 who_list = [ 26 #省略 27 ] 28 29 how_list = [ 30 #省略 31 ] 32 33 do_list = [ 34 #省略 35 ] 36 37 #リストからランダムに入れるメソッド 38 def buttonClick(self): 39 self.setWhen(Word.when_list[random.randint(0,len(Word.when_list)-1)]+"に") 40 self.setWhere(Word.where_list[random.randint(0, len(Word.where_list) - 1)]+"で") 41 self.setWho(Word.who_list[random.randint(0, len(Word.who_list) - 1)]+"が") 42 self.setWithWho(Word.who_list[random.randint(0, len(Word.who_list) - 1)]+"と") 43 self.setHow(Word.how_list[random.randint(0, len(Word.how_list) - 1)]) 44 self.setDo(Word.do_list[random.randint(0, len(Word.do_list) - 1)]) 45 46 #変数の中身確認用のprint 47 print(Word.when) 48 print(Word.where) 49 print(Word.who) 50 print(Word.with_who) 51 print(Word.how) 52 print(Word.do) 53 print("--------------") 54 55 def setWhen(self,word): 56 Word.when=word 57 58 def getWhen(self): 59 return Word.when 60 61 def setWhere(self,where): 62 Word.where=where 63 64 def getWhere(self): 65 return Word.where 66 67 def setWho(self,who): 68 Word.who=who 69 70 def getWho(self): 71 return Word.who 72 73 def setWithWho(self,with_who): 74 Word.with_who=with_who 75 76 def getWithWho(self): 77 return Word.with_who 78 79 def setHow(self,how): 80 Word.how=how 81 82 def getHow(self): 83 return Word.how 84 85 def setDo(self,do): 86 Word.do=do 87 88 def getDo(self): 89 return Word.do 90 91 92if __name__=="__main__": 93 94 word=Word() 95 96 root = Tk() 97 root.title("いつどこで・・・") 98 99 #フレーム 100 frame1 = ttk.Frame( 101 root, 102 height=300, 103 width=500, 104 ) 105 frame1.grid() 106 107 #プログラムの題名みたいなのを描写する用ののラベル 108 label_title = ttk.Label( 109 frame1, 110 text="「 いつどこでだれがだれとどのようになにをした 」", 111 background=("#ffffff"), 112 padding=(50, 5) 113 ) 114 label_title.grid(row=0, column=0, padx=10, pady=10, columnspan=6) 115 116 #「いつ」という文字を表示するようのラベル 117 label_when = ttk.Label( 118 frame1, 119 text="いつ", 120 background=("#ffff00"), 121 padding=(50, 5) 122 ) 123 label_when.grid(row=1, column=0, padx=10, pady=10) 124 125 #「どこで」という文字を表示するようのラベル 126 label_where = ttk.Label( 127 frame1, 128 text="どこで", 129 background=("#1e90ff"), 130 padding=(50, 5) 131 ) 132 label_where.grid(row=1, column=1, padx=10, pady=10) 133 134 #「だれが」という文字を表示するようのラベル 135 label_who = ttk.Label( 136 frame1, 137 text="だれが", 138 background=("#adff2f"), 139 padding=(50, 5) 140 ) 141 label_who.grid(row=1, column=2, padx=10, pady=10) 142 143 #「だれと」という文字を表示するようのラベル 144 label_with = ttk.Label( 145 frame1, 146 text="だれと", 147 background=("#f08080"), 148 padding=(50, 5) 149 ) 150 label_with.grid(row=1, column=3, padx=10, pady=10) 151 152 #「どのように」という文字を表示するようのラベル 153 label_how = ttk.Label( 154 frame1, 155 text="どのように", 156 background=("#ffa500"), 157 padding=(50, 5) 158 ) 159 label_how.grid(row=1, column=4, padx=10, pady=10) 160 161 #「なにをした」という文字を表示するようのラベル 162 label_do = ttk.Label( 163 frame1, 164 text="なにをした", 165 background=("#da70d6"), 166 padding=(50, 5) 167 ) 168 label_do.grid(row=1, column=5, padx=10, pady=10) 169 170 label_list = [word.getWhen(), word.getWhere(), word.getWho(), word.getWithWho(), word.getHow(), word.getDo()] 171 172 label_answer = (ttk.Label(frame1), ttk.Label(frame1), ttk.Label(frame1), 173 ttk.Label(frame1), ttk.Label(frame1), ttk.Label(frame1)) 174 175 #結果を表示するよう 176 for i in range(len(label_list)): 177 label_answer[i]["text"] = label_list[i] 178 label_answer[i]["background"] = ("#ffffff") 179 label_answer[i]["padding"] = (50, 5) 180 label_answer[i]["relief"] = "ridge" 181 label_answer[i].grid(row=2, column=i, padx=10, pady=10) 182 183 #関数を使うためのボタン 184 button1 = ttk.Button( 185 frame1, 186 text="OK?", 187 padding=(50, 5), 188 #ボタンを押すとメソッドbuttonClickが行われる 189 command=word.buttonClick 190 191 ) 192 button1.grid(row=3, column=0, padx=10, pady=10, columnspan=6) 193 194 root.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/21 14:17
退会済みユーザー
2018/04/21 14:23