前提
tkinterをクラスで表現するのに挑戦中です。
三つのボタンをfor文で設置し,ボタンをおすとラベルとなるフルーツが一つ抽選されます。
実現したいこと
for文で作成したボタンが押されたらボタンを削除して,消えたボタンの場所にラベルを表示させたいです。
発生している問題
self.result.place(x=self.x1,y=self.y1)とすると,何もラベルが表示されませんでした。
一方,x,yにそれぞれ適当な数字を設定すると,三つボタンをおしてもラベルを表示する場所がかぶってしまいました。
当たり前のことだとわかっていますが,解決法がわかりません。どうかご教授お願い致します。
該当のソースコード
python
import random import tkinter as tk class Main(tk.Frame): def __init__(self, master = None): super().__init__(master) self.master.geometry("500x60") self.master.resizable(False,False) self.canvas1 = tk.Canvas(self.master,width=500, height=60, bg="#fafafa") self.canvas1.pack() self.fruits = ["apple", "grape", "orange"] self.x1 = 10 self.y1 = 10 for i in range(3): self.button1 = tk.Button(master=self.canvas1, text=" 抽選 ", bg="#fafafa", fg="#000000",font=('MS Pゴシック', '17')) self.button1.place(x=self.x1,y=self.y1) self.button1.bind("<ButtonPress>",self.click_button) self.x1 += 165 def click_button(self,event): event.widget.destroy() self.chusen() self.result = tk.Label(master=self.canvas1, text=self.selected_fruits, bg="#fafafa", fg="#000000",font=('MS Pゴシック', '17')) self.result.place(x=self.x1,y=self.y1) def chusen(self): self.selected_fruits = random.choice(self.fruits) print(self.selected_fruits) def main(): root = tk.Tk() app = Main(master=root) app.mainloop() if __name__ == "__main__": main()
試したこと
ボタンを押したときのマウスのポインターの座標を取得すればと思いましたが,それだと毎度ばらばらの位置になってしまうと考え断念しました,
補足情報(FW/ツールのバージョンなど)
win11,python3.10.4
まだ回答がついていません
会員登録して回答してみよう