🐙

# Tkinterで画面を作る

2023/09/06に公開
import tkinter as tk
from tkinter import filedialog


class ToolbarView(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master

        self.pack()
        self.create_widgets()

    def create_widgets(self):
        # self.label1 = tk.Label(self)
        # self.label1["text"] = "これはToolbarViewです"
        # self.label1["fg"] = "red"
        # self.label1["bg"] = "gray"
        # self.label1.pack()
        # self.fileButton = tk.Button(self)
        # self.fileButton["text"] = "ファイル"
        # self.fileButton["command"] = self.openFiles

        # file_label = tk.Label(self, text="File")
        # file_label.pack(pady=20)
        self.choices = [
            "File",
            "New File",
            "Recent files",
            "Save",
            "Save as",
            "Print",
        ]
        self.selected_option = tk.StringVar(self)
        self.selected_option.set(self.choices[0])
        # self.fileOption = tk.OptionMenu(
        #     self, self.selected_option, *self.choices
        # )
        self.fileOption = tk.OptionMenu(
            self, self.selected_option, *self.choices
        )
        self.fileOption.pack(side="left", padx=20)
        self.selected_option.trace("w", self.option_selected)

        # 結果を表示するラベル
        self.result_label = tk.Label(self, text="")
        self.result_label.pack()

    def option_selected(self, *args):
        # 選択されたオプションが変更されたときに呼び出されるコールバック
        selected_option = self.selected_option.get()
        self.selected_option.set(self.choices[0])
        self.result_label.config(text=f"選択されたオプション: {selected_option}")

    # def openFiles(self):
    #     filedialog.


class NavigatorView(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.label2 = tk.Label(self)
        self.label2["text"] = "これはNavigatorViewです"
        self.label2["fg"] = "blue"
        self.label2["bg"] = "white"
        self.label2.pack()
        # ここにFrame2のウィジェットを追加


class UtilityView(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.label2 = tk.Label(self)
        self.label2["text"] = "これはUtilityViewです"
        self.label2["fg"] = "blue"
        self.label2["bg"] = "black"
        self.label2.pack()
        # ここにFrame2のウィジェットを追加


class MainView(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        # self.label2 = tk.Label(self)
        # self.label2["text"] = "これはMainViewです"
        # self.label2["fg"] = "blue"
        # self.label2["bg"] = "red"
        # self.label2.pack()
        self.canvas = tk.Canvas(self, width=300, height=300, bg="blue")
        self.canvas.pack()


# ここにFrame2のウィジェットを追加


class ContentView(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.toolbarView = ToolbarView(self)
        self.toolbarView.pack(side="top", expand=True)

        self.utilityView = UtilityView(self)
        self.utilityView.pack(side="right", expand=True)

        self.navigatorView = NavigatorView(self)
        self.navigatorView.pack(side="left", expand=True)

        self.mainView = MainView(self)
        self.mainView.pack(side="top", expand=True)


class Application(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("多重フレームアプリケーション")

        # ContentViewを作成
        self.contentView = ContentView(self)
        self.contentView.pack(fill=tk.BOTH, expand=True)

        # アプリケーションの実行
        self.mainloop()


if __name__ == "__main__":
    application = Application()

Discussion