Python tkinter クラスを用いてフレームやエントリーボックス、ラベル、ボタンなどを表示する方法

まくまく
まくまく
以前は所謂「手続き型」で同様の記事を書きましたが、今回はそれをクラスを用いて記載してみようと思います。

tkinterでウインドウとフレームを作成して、そこにエントリーボックス、ラベル、ボタンなどを配置しました。ボタンをクリックすると入力されたテキストをコピーして、他のエントリーボックスやラベルに貼り付けできるようにしました。

まずは出力から。

出力


プログラムを実行すると、このようなウインドウが立ち上がります。

色合いが少し分かりにくいですが、フレームを2つ作成しています。上段と下段で分けてます。

上段部のフレーム1は、テキストを入力するエントリーボックスを配置

下段部のフレーム2は、貼り付け先となるエントリーボックスとラベルを配置しています。


上段部のエントリーボックスにテキストを入力して、右にある「コピー&ペースト」ボタンを押すと、


下段のエントリーボックスとラベルにテキストが貼り付けされました。

エントリーボックスは、ボタンが押される度にデリート処理が行われるようにしているので、書き換えにも対応しています。ラベルの方は特にデリートなどしなくても上手く書き変わるようです。



雛形

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)
        self.master.geometry()
        self.master.title('ウインドウ')

def main():
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()


クラスを用いてウインドウを作成します。上のコードを実行とすると、新しいウインドウが作成されます。今回はこのコードをもとに作成してみようと思います。

サンプルプログラム

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

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master.geometry("500x200+50+50")
        self.master.title("ウインドウ")
        #フレームの作成
        self.frame1 = tk.Frame(self.master, width=480, 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=480, 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.label1 = tk.Label(self.frame1, text="入力用エントリーボックス")
        self.label1.grid(row=0, column=0, sticky=tk.W)
        self.entry1 = tk.Entry(self.frame1, width=30)
        self.entry1.grid(row=1, column=0, sticky=tk.W)
        self.button = tk.Button(self.frame1, text="コピー&ペースト")
        self.button.grid(row=1, column=1)
        self.button.bind("", self.click_button)
            
        #貼り付け先
        self.label2 = tk.Label(self.frame2, text="貼り付け先エントリーボックス&ラベル")
        self.label2.grid(row=0, column=0, sticky=tk.W)
        self.entry2 = tk.Entry(self.frame2, width=30)
        self.entry2.grid(row=1, column=0, sticky=tk.W)
        self.text = tk.StringVar()
        self.label = tk.Label(self.frame2, textvariable=self.text)
        self.label.grid(row=2, column=0, sticky=tk.W, pady=5)
        
    def click_button(self, event):
        en_get = self.entry1.get()
        self.entry2.delete("0", "end")
        self.entry2.insert(0, str(en_get))
        self.text.set(en_get)
        
def main():
    root = tk.Tk()
    root.resizable(width=False, height=False)
    app = Application(master=root)
    app.mainloop()

if __name__ == "__main__":
    main()

Python tkinterについてはこちらの記事でまとめています。>>>Python tkinter 使い方まとめ

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