前提・実現したいこと
tkinterのStringVar()を用いたGUIの作成。
ChildWindowで各ボタンから1つ選択してからcloseを選択すると、
ChildWindowは消えてその選んだ文字がMainWindowに反映させるようにはできたが、
ChildWindowで設定した項目をMainWindowだけでなく、
ChildWinow2側にも表示したい。
該当のソースコード
python
1# -*- coding: utf-8 -*- 2 3import tkinter as tk 4import tkinter as ttk 5 6class MainWindow(tk.Frame): 7 def __init__(self,master): 8 super().__init__(master) 9 self.grid() 10 self.master.geometry("200x150+10+10") 11 self.master.title("MainWindow") 12 self.create_widgets() 13 14 def create_widgets(self): 15 self.param = tk.StringVar() 16 button = tk.Button(self, text="設定",command = self.set_vrt) 17 button.grid(row=0, column=0) 18 label = tk.Label(self,textvariable=self.param) 19 label.grid(row=1, column=2,columnspan=3,sticky=tk.W+tk.E) 20 button2 = tk.Button(self, text="反映",command = self.set_vrt2) 21 button2.grid(row=0, column=1) 22 23 def set_vrt(self): 24 self.newWindow = tk.Toplevel(self.master) 25 self.newWindow.grab_set() 26 self.app = ChildWindow(self.newWindow, self) 27 28 def set_vrt2(self): 29 self.newWindow = tk.Toplevel(self.master) 30 self.newWindow.grab_set() 31 self.app = ChildWindow2(self.newWindow) 32 33 34class ChildWindow(tk.Frame): 35 def __init__(self,master, main): 36 super().__init__(master) 37 self.grid() 38 self.master.geometry("200x150") 39 self.master.title("ChildWindow") 40 self.create_widgets() 41 self.main=main 42 43 def create_widgets(self): 44 label = tk.Label(self, text="""一つ選択していください。:""", justify = tk.LEFT, padx = 20) 45 label.grid(row=0,column=0,sticky=tk.W) 46 self.dialog = tk.StringVar() 47 languages = [("a","a"),("b","b"),("c","C")] 48 for language, val in languages: 49 tk.Radiobutton(self.master, 50 text=language, 51 indicatoron = 0, 52 width = 20, 53 padx = 20, 54 variable=self.dialog, 55 command=None, 56 value=val).grid(sticky=tk.W) 57 closeButton = tk.Button(self.master, text="close", command=self.close) 58 closeButton.grid(sticky=tk.W) 59 60 def close(self): 61 self.main.param.set(self.dialog.get()) 62 self.master.destroy() 63 64 65class ChildWindow2(tk.Frame): 66 def __init__(self,master): 67 super().__init__(master) 68 self.grid() 69 self.master.geometry("200x150") 70 self.master.title("ChildWindow2") 71 self.create_widgets() 72 73 def create_widgets(self): 74 self.param = tk.StringVar() 75 label = tk.Label(self,textvariable=self.param) 76 label.grid(row=0, column=0) 77 78 79def main(): 80 root = tk.Tk() 81 app = MainWindow(master=root) 82 app.mainloop() 83 84if __name__ == "__main__": 85 main()
試したこと
エラーは発生しませんが、ChildWindow2には何も表示されません。
このコードの記述方法だとMainWindowからしかStringVarの参照が出来ないのでしょうか?
補足情報(FW/ツールのバージョンなど)
Python 3.8.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/26 12:15
2021/01/26 13:16
2021/01/26 14:00