前提
tkinterをクラスで表現するのに挑戦中です。
三つのボタンをfor文で設置し,ボタンをおすとラベルとなるフルーツが一つ抽選されます。
実現したいこと
for文で作成したボタンが押されたらボタンを削除して,消えたボタンの場所にラベルを表示させたいです。
発生している問題
self.result.place(x=self.x1,y=self.y1)とすると,何もラベルが表示されませんでした。
一方,x,yにそれぞれ適当な数字を設定すると,三つボタンをおしてもラベルを表示する場所がかぶってしまいました。
当たり前のことだとわかっていますが,解決法がわかりません。どうかご教授お願い致します。
該当のソースコード
python
1import random 2import tkinter as tk 3class Main(tk.Frame): 4 def __init__(self, master = None): 5 super().__init__(master) 6 self.master.geometry("500x60") 7 self.master.resizable(False,False) 8 self.canvas1 = tk.Canvas(self.master,width=500, height=60, bg="#fafafa") 9 self.canvas1.pack() 10 self.fruits = ["apple", "grape", "orange"] 11 self.x1 = 10 12 self.y1 = 10 13 for i in range(3): 14 self.button1 = tk.Button(master=self.canvas1, text=" 抽選 ", 15 bg="#fafafa", fg="#000000",font=('MS Pゴシック', '17')) 16 self.button1.place(x=self.x1,y=self.y1) 17 self.button1.bind("<ButtonPress>",self.click_button) 18 self.x1 += 165 19 20 def click_button(self,event): 21 event.widget.destroy() 22 self.chusen() 23 self.result = tk.Label(master=self.canvas1, text=self.selected_fruits, 24 bg="#fafafa", fg="#000000",font=('MS Pゴシック', '17')) 25 self.result.place(x=self.x1,y=self.y1) 26 def chusen(self): 27 self.selected_fruits = random.choice(self.fruits) 28 print(self.selected_fruits) 29 30def main(): 31 root = tk.Tk() 32 app = Main(master=root) 33 app.mainloop() 34 35if __name__ == "__main__": 36 main()
試したこと
ボタンを押したときのマウスのポインターの座標を取得すればと思いましたが,それだと毎度ばらばらの位置になってしまうと考え断念しました,
補足情報(FW/ツールのバージョンなど)
win11,python3.10.4
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/07/03 04:46