タブで 2つの Frame の切り替えができるようにしようとしたら、Frame が2つ縦に並んでしまった件 (1回目: 失敗)
前回、入力用の Entry とボタンを使ったシンプルな UI を作成しました。今回は、これらをタブで切り替えられるようにしてみようと思いました。
BaseFrame という名の tk.Frame を作成し、notebook.add() すればよいのだと思ったのですが。。。
結果は、
思ってたのと違う。。。
タブはあるのだけど、2つの Frame が縦に並んでしまいました。。。
今日はここまでにしよう。。
・現時点のプログラム。 "Notebookを使ってタブを設定してみる" 行からが今回の追加分です。
import tkinter as tk
import tkinter.ttk as ttk
class BaseFrame(tk.Frame):
def __init__(self, master):
frame_color = "lightskyblue"
# call constructor
super().__init__(master, relief="groove", bd=6)
self.base_frame = tk.Frame(master,
bg=frame_color,
relief="sunken", bd=5)
self.base_frame.grid()
# put label
self.r0c0_label = tk.Label(self.base_frame, font=("system"),
text="path: ", anchor="w", padx=1, width=10)
self.r0c0_label.grid(row=0, column=0, sticky="w")
# put entry
self.r0c0_entry = tk.Entry(self.base_frame, width=50, bd=2, font=("system"))
self.r0c0_entry.grid(row=0, column=0, columnspan=2, padx="60", sticky="w")
self.r1c0_button = tk.Button(self.base_frame, text="put button",
command=lambda obj=self.r0c0_entry:
run_script(obj)
)
self.r1c0_button.grid(row=1, column=0, pady=5, sticky="w")
def run_script(entry=None):
url = entry.get()
print(url)
class MainWindow:
def __init__(self):
self.root = tk.Tk()
self.root.title("GUI")
self.root.attributes("-topmost", True)
# -----------------------------------
# Notebook を使ってタブを設定してみる
# -----------------------------------
notebook = ttk.Notebook(self.root)
notebook.grid(sticky="w")
# tab に表示する frame1 と frame2 を生成する
self.frame1 = BaseFrame(master=self.root)
self.frame2 = BaseFrame(master=self.root)
# notebook に追加する
notebook.add(self.frame1, text="tab1")
notebook.add(self.frame2, text="tab2")
# 変更はここまで ------------------------
self.root.mainloop()
# start program
MainWindow()
if __name__ == '__main__':
pass