python3でオブジェクト指向の勉強をしています。
TKINTERを使ってアプリを作成したいのですが、FrameやNotebookを複数つかう際にClassの構造をどのように構築したらいいのかがわかりません。
未熟者なため書き方があっているかわかりませんが私のイメージでは下記の通りです。
tk.Tk()
→tk.Canvas()
→scrollbarを作成
→tk.Frame()
→tk.Canvasの上にtk.Frame()を配置
→ttk.Notebook(Frame)
→tk.Frameの上にnotebookを配置してタブを6つ追加
→各タブについてウィジェットを追加していくコードを書く
手続き型の作成はできているのですがオブジェクト指向で書くことが出来ません。
ご指導のほどよろしくお願いします。
手続き型では下記のように記入しました。
python
1# GUIの作成 2import tkinter as tk 3import tkinter.ttk as ttk 4 5root = tk.Tk() 6root.geometry('2000x1500') 7root.title('テスト') 8 9Canvas Widget を生成 10canvas = tk.Canvas(root, width=2000, height=1500) 11 12#Scrollbar を生成して配置 13bar_y = tk.Scrollbar(root, orient=tk.VERTICAL) 14bar_y.pack(side=tk.RIGHT, fill=tk.Y) 15bar_y.config(command=canvas.yview) 16 17bar_x = tk.Scrollbar(root, orient=tk.HORIZONTAL) 18bar_x.pack(side=tk.BOTTOM, fill=tk.X) 19bar_x.config(command=canvas.xview) 20 21canvas.config(yscrollcommand=bar_y.set, xscrollcommand=bar_x.set) 22canvas.config(scrollregion=(0, 0, 4000, 5000)) # スクロール範囲 23canvas.pack(fill=tk.BOTH, expand=tk.YES) 24 25# Frame Widgetを 生成 26frame = tk.Frame(canvas) 27 28# Frame Widgetを Canvas Widget上に配置 29canvas.create_window((0, 0), window=frame, anchor=tk.NW, width=canvas.cget('width')) 30 31notebook = ttk.Notebook(frame) 32 33tab1 = tk.Frame(notebook) 34tab2 = tk.Frame(notebook) 35tab3 = tk.Frame(notebook) 36tab4 = tk.Frame(notebook) 37tab5 = tk.Frame(notebook) 38tab6 = tk.Frame(notebook) 39 40notebook.add(tab1, text='tab1') 41notebook.add(tab2, text='tab2') 42notebook.add(tab3, text='tab3') 43notebook.add(tab4, text='tab4') 44notebook.add(tab5, text='tab5') 45notebook.add(tab6, text='tab6') 46notebook.pack(expand=True, fill='both') 47 48# オブジェクト指向での記入 49import tkinter as tk 50import tkinter.ttk as ttk 51 52 53class Application(tk.Canvas): 54 def __init__(self, master=None): 55 super().__init__(master, width=2000, height=1000) 56 self.master.title('CBD') 57 58 # Scrollbar を生成して配置 59 self.bar_y = tk.Scrollbar(self, orient=tk.VERTICAL) 60 self.bar_y.pack(side=tk.RIGHT, fill=tk.Y) 61 self.bar_y.config(command=self.yview) 62 63 self.bar_x = tk.Scrollbar(self, orient=tk.HORIZONTAL) 64 self.bar_x.pack(side=tk.BOTTOM, fill=tk.X) 65 self.bar_x.config(command=self.xview) 66 67 self.config(yscrollcommand=self.bar_y.set, xscrollcommand=self.bar_x.set) 68 self.config(scrollregion=(0, 0, 4000, 5000)) # スクロール範囲 69 self.pack(fill=tk.BOTH, expand=tk.YES) 70 71 self.frame = tk.Frame(self) 72 self.create_window((0, 0), window=self.frame, anchor=tk.NW, width=self.cget('width')) 73 74 nootebook = ttk.Notebook(self.frame) 75 Note(master=nootebook) 76 77class Note(nootebook): 78 79def __init__(self, master=None): 80 super().__init__(master) 81 self.master.title('window') 82 83 tab1 = tk.Frame(self.master) 84 self.add(tab1, text="tab1") 85 Tab1(master=tab1) 86 87 tab2 = tk.Frame(self.master) 88 self.add(tab2, text="tab2") 89 Tab2(master=tab2) 90 91 self._quit_outside_widget() 92 self.pack() 93 94 95def main(): 96 root = tk.Tk() 97 app = Application(master=root) # Inherit 98 app.mainloop() 99 100 101if __name__ == "__main__": 102 main()
回答1件
あなたの回答
tips
プレビュー