前提・実現したいこと
tkinterでGUIを作成する時、機能が増えると分かりにくくなるので、機能に応じてソースをファイルしたいです。
具体的に、下のコードでは、タブが2つあります。
これをタブごとにソースファイルを作成したいです。
Pythonでは、どの様に記述するのが良いのでしょうか?
よろしくお願いします。
該当のソースコード
Python
1#!/usr/bin/python3 2# -*- coding: utf8 -*- 3import os, sys, time 4import tkinter as tk 5import tkinter.ttk as ttk 6 7class Application(tk.Frame): 8 def __init__(self, master=None): 9 super().__init__(master) 10 self.pack() 11 self.create_widgets() 12 return 13 14 def create_widgets(self): 15 nb = ttk.Notebook(self) 16 tab1 = tk.Frame(nb) 17 tab2 = tk.Frame(nb) 18 nb.add(tab1, text='tab1', padding=3) 19 nb.add(tab2, text='tab2', padding=3) 20 nb.pack(expand=1, fill='both') 21 self.create_tab1(tab1) 22 self.create_tab2(tab2) 23 24 # tab1 25 def create_tab1(self,tab1): 26 text1 = tk.StringVar() 27 text1.set("Tab1:Hello ") 28 label1 = tk.Label(tab1, textvariable = text1) 29 label1.pack() 30 btnTab1 = tk.Button(tab1) 31 btnTab1["text"] = "Test1" 32 btnTab1["command"] = self.btnTab_func 33 btnTab1["width"] = 12 34 btnTab1.pack() 35 return 36 37 # tab2 38 def create_tab2(self,tab2): 39 text2 = tk.StringVar() 40 text2.set("Tab2:Hello ") 41 label2 = tk.Label(tab2, textvariable = text2) 42 label2.pack() 43 btnTab2 = tk.Button(tab2) 44 btnTab2["text"] = "Test2" 45 btnTab2["command"] = self.btnTab_func 46 btnTab2["width"] = 12 47 btnTab2.pack() 48 49 # callback 50 def btnTab_func(self): 51 print("Tab button Push ") 52 return 53 54 55# メイン関数 56def main(): 57 # Windowの生成 58 root = tk.Tk() 59 root.geometry("200x100") 60 root.title(u"Test") 61 app = Application(master=root) 62 app.mainloop() 63 pass 64 65if __name__ == '__main__': 66 main() 67
試したこと
create_tab1()、create_tab2()を別ファイルにして、動作をさせることが出来ましたが、labelの内容を書換る為にウィジェット変数にアクセス出来ませんでした。
#【追記】自分で分割したソース
TestTab.py、mtab1.py、mtab2.pyの3つに分割しました。
該当のソースコード
メイン:TestTab.py
Python
1#!/usr/bin/python3 2# -*- coding: utf8 -*- 3import tkinter as tk 4import tkinter.ttk as ttk 5import mtab1 6import mtab2 7 8 9class Application(tk.Frame): 10 def __init__(self, master=None): 11 super().__init__(master) 12 self.pack() 13 self.create_widgets() 14 return 15 16 def create_widgets(self): 17 nb = ttk.Notebook(self) 18 tab1 = tk.Frame(nb) 19 tab2 = tk.Frame(nb) 20 nb.add(tab1, text='tab1', padding=3) 21 nb.add(tab2, text='tab2', padding=3) 22 nb.pack(expand=1, fill='both') 23 mtab1.create_tab1(self,tab1) 24 mtab2.create_tab2(self,tab2) 25 26 27# メイン関数 28def main(): 29 root = tk.Tk() 30 root.geometry("200x100") 31 root.title(u"Tab Test") 32 app = Application(master=root) 33 app.mainloop() 34 pass 35 36if __name__ == '__main__': 37 main()
mtab1.py
関係ないところ省略
Python
1# tab1 2def create_tab1(self,tab1): 3 text1 = tk.StringVar() 4 text1.set("Tab1:Hello ") 5 label1 = tk.Label(tab1, textvariable = text1) 6 label1.pack() 7 btnTab1 = tk.Button(tab1) 8 btnTab1["text"] = "Test" 9 btnTab1["command"] = btnTab1_func 10 btnTab1["width"] = 12 11 btnTab1.pack() 12 return 13 14 15 16# callback 17def btnTab1_func(): 18 text1.set("Tab1:goodbye ") 19 print("Tab1 button Push ") 20 return 21
mtab2.py
関係ないところ省略
Python
1# tab2 2def create_tab2(self,tab2): 3 text2 = tk.StringVar() 4 text2.set("Tab2:Hello ") 5 label2 = tk.Label(tab2, textvariable = text2) 6 label2.pack() 7 btnTab2 = tk.Button(tab2) 8 btnTab2["text"] = "Test" 9 btnTab2["command"] = btnTab2_func 10 btnTab2["width"] = 12 11 btnTab2.pack() 12 13 14# callback 15def btnTab2_func(): 16 text2.set("Tab2:goodbye ") 17 print("Tab2 button Push ") 18 return
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/02 23:57
2021/09/03 00:06
2021/09/03 01:34
2021/09/03 03:57
2021/09/04 00:40