
まくまく
以前は所謂「手続き型」で同様の記事を書きましたが、今回はそれをクラスを用いて記載してみようと思います。
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 使い方まとめ