Python の Tkinter でボタンをおすごとにウィジェットを増やす
ボタンを押すごとに、ウィジェットを増やしたい。今回は適当に文字(Label)を増やします。
※python2系の場合はtkinterをTkinterに変えてください。
キャンバスとボタンを配置
ここは好きなように適当にやろう。
import tkinter window = tkinter.Tk() window.geometry("400x400") window.title("Try to click the button") canvas = tkinter.Canvas(width=410, height=410, background="#ccb") canvas.place(x=-5, y=-5) button = tkinter.Button(canvas, text="add", width=5) button.place(x=200, y=200) window.mainloop()
関数などを用意
今回は、「ウィジェットを増やすための関数 (add_widget) 」と、「ボタンの動作関数 (clicked_button) 」の二つ。追加できるウィジェットの数に上限を儲けたいので、clicked_button関数ではその辺を関しつつ、実際の追加動作はadd_widget関数にさせる。
また、表示個数と表示位置管理のため、プログラムの頭でグローバル変数を二つ宣言する。今回の上限は5個
最後にbuttonに対して関数を紐づけて終了。
以下プログラム全文
import tkinter num = 0 # 追加したウィジェットの数 w_y = 0 # 追加していくウィジェットの縦位置 # ウィジェットを増やす関数 def add_widget(widget): global w_y w_y = w_y + 60 widget.place(x=20, y=w_y) # ボタンの動作関数 def clicked_button(widget): global num if num < 5: # 上限5個 disp_text = str(num+1) + "つ目" # 表示文字列 text = tkinter.Label(widget, text=disp_text) add_widget(text) # 追加関数に投げる num = num + 1 window = tkinter.Tk() window.geometry("400x400") window.title("Try to click the button") canvas = tkinter.Canvas(width=410, height=410, background="#ccb") canvas.place(x=-5, y=-5) # 下の引数の中にcommandを追加する。 button = tkinter.Button(canvas, text="add", width=5, command=lambda:clicked_button(canvas)) button.place(x=200, y=200) window.mainloop()
gifが雑すぎて押していなくても増えているように見えるが、ちゃんとボタンをおすごとに増える動作をする。