Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

python用TKインターフェイスtkinter その4:グリッドレイアウト

実際のところ

import tkinter as tk
from tkinter import messagebox

class Application(tk.Frame):
    # 初期化
    def __init__(self, master=None):
        super().__init__(master)
        self.grid(sticky="nsew")  # self.pack() を self.grid() に変更
        self.create_widgets()

    # 画面の作成
    def create_widgets(self):
        # ラベルウィジェット
        self.label = tk.Label(self, text="This is a label")
        self.label.grid(row=0, column=0, sticky="nsew")
        
        # ボタンウィジェット
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.grid(row=0, column=1, sticky="nsew")

        # ラジオボタンウィジェット
        self.fruit = tk.StringVar()  # ラジオボタンの選択結果を保存する変数
        # ラジオボタンを同じ列に配置
        self.apple_radio = tk.Radiobutton(self, text="Apple", variable=self.fruit, value="Apple")
        self.apple_radio.grid(row=0, column=2, sticky="nsew") 
        self.orange_radio = tk.Radiobutton(self, text="Orange", variable=self.fruit, value="Orange")
        self.orange_radio.grid(row=1, column=2, sticky="nsew")
        self.banana_radio = tk.Radiobutton(self, text="Banana", variable=self.fruit, value="Banana")
        self.banana_radio.grid(row=2, column=2, sticky="nsew")

        # スケールウィジェット
        self.scale = tk.Scale(self, orient="horizontal")  # 横方向にスライド
        self.scale.grid(row=0, column=3, sticky="nsew")

        # 終了ボタンウィジェット
        self.quit = tk.Button(self, text="QUIT", fg="red", command=self.quit_message)
        self.quit.grid(row=0, column=4, sticky="nsew")

    # ボタンを押したときのアクション
    def say_hi(self):
        print("Hi there, everyone!")
        print(f"Your fruit choice: {self.fruit.get()}")  # ラジオボタンの選択結果を表示
        print(f"Scale value: {self.scale.get()}")  # スケールの値を表示

    # 終了ボタンを押したときのアクション
    def quit_message(self):
        if messagebox.askokcancel("Quit", "Do you really wish to quit?"):
            root.destroy()

root = tk.Tk()
root.grid_columnconfigure((0, 1, 2, 3, 4), weight=1)  # 各列に均等にスペースを割り当て
root.grid_rowconfigure((0, 1, 2), weight=1)  # 各行に均等にスペースを割り当て
app = Application(master=root)
app.mainloop()  # ここでレンダリング

動かすと、こんな感じ