
まくまく
tkinterで複数のボタンがずらりと並ぶGUIアプリを作成する時など、ひとつひとつ「tk.button〜」って書くのが面倒なので、for文で記載できないか???というのを色々と調べながらやってみました。
出力
プログラムを実行するとこのようなウインドウが立ち上がります。
上段にはfor文で一括作成したボタンが8つ、下段にはエントリーボックスを配置しました。
ボタンを押すと、ボタンに書かれた果物名が下段のエントリーボックスに表示されます。
「いちご」ボタンを押すとエントリーボックスには「いちご」と表示、「ぶどう」ボタンを押すとエントリーボックスには「ぶどう」と表示されます。
サンプルプログラム
#ライブラリのインポート
import tkinter as tk
items = ["りんご", "みかん", "すいか", "もも", "ぶどう", "ばなな", "いちご", "めろん"]
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master.geometry("600x200+50+50")
self.master.title("ウインドウ")
#フレームの作成
self.frame1 = tk.Frame(self.master, width=580, height=70, padx=10, pady=10, bg="#E6E6E6")
self.frame1.grid_propagate(False)
self.frame1.place(x=10, y=10)
self.frame2 = tk.Frame(self.master, width=580, height=100, padx=10, pady=10, bg="#E6E6E6")
self.frame2.grid_propagate(False)
self.frame2.place(x=10, y=90)
#ウィジェット作成
self.create_widgets()
def create_widgets(self):
#貼り付け先
self.label = tk.Label(self.frame2, text="選択したボタン")
self.label.grid(row=0, column=0, sticky=tk.W)
self.entry = tk.Entry(self.frame2, width=30)
self.entry.grid(row=1, column=0, sticky=tk.W)
def click_button(item):
def bt():
self.entry.delete("0", "end")
self.entry.insert(0, str(item))
return bt
self.buttons = []
for i, item in enumerate(items):
self.buttons.append(str(item))
self.button = tk.Button(self.frame1, text=item, width=3, height=1,command=click_button(item))
self.button.grid(row=0, column=i)
def main():
root = tk.Tk()
app = Application(master=root)
app.mainloop()
if __name__ == "__main__":
main()
Python tkinterについてはこちらの記事でまとめています。>>>Python tkinter 使い方まとめ