Python tkinter for文で8個のボタンを一括作成してそれぞれにコマンドを割り当てる

まくまく
まくまく
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 使い方まとめ

タイトルとURLをコピーしました