前提・実現したいこと
現在、menu.pyからA.py、B.pyを読み出し、画面遷移を行うものを作っています。
記載するコードは単純化したものですが、Aフレームから「Bに入力」ボタンを押し、Bフレームに遷移した時、Aフレームのテキストボックスの値がBフレームのテキストボックスに挿入され、Bフレームの「表示」ボタンが押された状態にしたいのですが、どのようにすれば良いかわからず困っています。
当方、プログラミング初心者なため、どのようなコードにすれば良いかわかりやすくご教授いただけると幸いです。
よろしくお願い致します。
該当のソースコード
menu.py
1#menu.py 2import tkinter as tk 3from tkinter import ttk 4from A import AApp 5from B import BApp 6 7 8class FrameBase(tk.Tk): 9 def __init__(self): 10 tk.Tk.__init__(self) 11 self.frame = MenuFrame(self) 12 self.frame.pack(expand=True, fill="both") 13 14 def change(self, frame): 15 self.frame.pack_forget() 16 self.frame = frame(self) 17 self.frame.pack(expand=True, fill="both") 18 19 def backToMenu(self): 20 self.frame.pack_forget() 21 self.frame = MenuFrame(self) 22 self.frame.pack(expand=True, fill="both") 23 24 def gotoB(self): 25 self.frame.pack_forget() 26 self.frame = BApp(self) 27 self.frame.pack(expand=True, fill="both") 28 29class MenuFrame(tk.Frame): 30 def __init__(self, menu=None, **kwargs): 31 tk.Frame.__init__(self, menu, **kwargs) 32 menu.title("メニュー画面") 33 menu.geometry("100x100") 34 self.grid(column=0, row=0, sticky=tk.NSEW) 35 36 self.Applist =[ [AApp, "A"], [BApp, "B"] ] 37 38 for i in range(2): 39 btn = tk.Button(master=self, wraplength=50, justify=tk.LEFT,text=self.Applist[i][1], 40 command=self.gotoApp(i)) 41 btn.grid(column=i, row=1, padx=10, pady=10, sticky=tk.NSEW) 42 43 44 def gotoApp(self,i): 45 return lambda :self.master.change(self.Applist[i][0]) 46 47def main(): 48 app = FrameBase() 49 app.mainloop() 50 51 52if __name__ == "__main__": 53 main()
A.py
1#A.py 2import tkinter as tk 3from B import BApp 4 5class AApp (tk.Frame): 6 def __init__(self, A=None, **kwargs): 7 tk.Frame.__init__(self,A, **kwargs) 8 9 def btnA2_click(): 10 self.master.gotoB()#ここから先が不明 11 BApp.TextBoxB.insert(tk.END,TextBoxA.get()) 12 BApp.btnB2_click() 13 14 A.title("A") 15 A.geometry("300x300") 16 17 btnA1 = tk.Button(master=self, wraplength=50, justify=tk.LEFT,text='メニュー', 18 command=self.master.backToMenu) 19 btnA1.grid(column=1, row=1, padx=10, pady=10, sticky=tk.NSEW) 20 21 btnA2 = tk.Button(master=self, wraplength=50, justify=tk.LEFT,text='Bに入力', 22 command=btnA2_click) 23 btnA2.grid(column=2, row=1, padx=10, pady=10, sticky=tk.NSEW) 24 25 TextBoxA = tk.Entry(master=self,state='normal', width=14,justify=tk.CENTER) 26 TextBoxA.grid(column=1, row=2, padx=10, pady=10, sticky=tk.NSEW)
B.py
1#B.py 2import tkinter as tk 3 4class BApp (tk.Frame): 5 def __init__(self, B=None, **kwargs): 6 tk.Frame.__init__(self,B, **kwargs) 7 8 def btnB2_click(): 9 label.config(text=TextBoxB.get()) 10 11 B.title("B") 12 B.geometry("200x200") 13 14 btnB1 = tk.Button(master=self, wraplength=50, justify=tk.LEFT,text='メニュー', 15 command=self.master.backToMenu) 16 btnB1.grid(column=1, row=1, padx=10, pady=10, sticky=tk.NSEW) 17 18 btnB2 = tk.Button(master=self, wraplength=50, justify=tk.LEFT,text='表示', 19 command= btnB2_click) 20 btnB2.grid(column=2, row=1, padx=10, pady=10, sticky=tk.NSEW) 21 22 TextBoxB = tk.Entry(master=self,state='normal', width=14,justify=tk.CENTER) 23 TextBoxB.grid(column=1, row=2, padx=10, pady=10, sticky=tk.NSEW) 24 25 label = tk.Label(master=self, text="") 26 label.grid(column=1, row=3, padx=10, pady=10, sticky=tk.NSEW) 27
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/28 10:13