tkinter StringVarを複数設定する方法

まくまく
まくまく
tkinterで複数のラベルを一気に書き換える方法はどうしたらよい?⇒単にStringVarを複数設定するだけでした。



出力


やりたいのは、テキストボックスを複数作成して、そこに任意のテキストを入力。ボタンを押すとそれぞれのテキストが下のラベルに表示されるというものです。


こんな感じです。それぞれのテキストがそれぞれのラベルに転記されたのがわかると思います。

方法はとてもシンプルで、単にStringVarを複数設定して変数で分けるだけです。

下のプログラムの20行目、27行目でStringVarの記載をしていますが、ここの変数を「self.text_a」、「self.text_b」というように分けてます。

あとはボタンイベントであるdef click_button関数でどちらのテキストをどこに書き込むかを指定するだけです。

サンプルプログラム

#ライブラリのインポート
import tkinter as tk

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=180, padx=10, pady=10, bg="#E6E6E6")
        self.frame1.grid_propagate(False)
        self.frame1.place(x=10, y=10)
        #ウィジェット作成
        self.create_widgets()
    
    def create_widgets(self):
        #テキストボックス-ラベル-1
        self.entry1 = tk.Entry(self.frame1, width=30)
        self.entry1.grid(row=0, column=0, sticky=tk.W,padx=10)
        self.text_a = tk.StringVar()
        self.label1 = tk.Label(self.frame1, textvariable=self.text_a)
        self.label1.grid(row=1, column=0, sticky=tk.W, padx=10)

        #テキストボックス-ラベル-2
        self.entry2 = tk.Entry(self.frame1, width=30)
        self.entry2.grid(row=0, column=1, sticky=tk.W, padx=10)
        self.text_b = tk.StringVar()
        self.label2 = tk.Label(self.frame1, textvariable=self.text_b)
        self.label2.grid(row=1, column=1, sticky=tk.W, padx=10)

        #ボタン作成
        self.button = tk.Button(self.frame1, text="ボタン", width=3, height=1)
        self.button.grid(row=2, column=0)
        self.button.bind("", self.click_button)
    
    #ボタンを押したときのコマンド設定
    def click_button(self, event):
            en_get = self.entry1.get()
            self.text_a.set(en_get)
            en_get2 = self.entry2.get()
            self.text_b.set(en_get2)
        
def main():
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()
タイトルとURLをコピーしました