実現したいこと
①ボタン1が表示されているフレーム1、ボタン2が表示されているフレーム2を作成する。
②ボタン1を押すとフレーム2に、ボタン2を押すとフレーム1に切り替わるような機能をボタンにつける。
③初めに表示させるのはフレーム1。
(可能であれば.gridメソッドでフレーム中央にボタンを配置する方法を教えてください。.packならできるんですが......)
前提
pythonでtkinterとclassの記述方法について練習しています。
(冗長な記述等あれば遠慮なくご指摘ください。)
発生している問題・エラーメッセージ
下記のコードが思うように動きません。
初めにフレーム1が表示され、ボタン1をクリックするとフレーム2に切り替わるところまではうまくいきました。
しかしボタン2をクリックしても何も起きません。エラー等も発生していないので原因がわかりません。
該当のソースコード
python
1import tkinter as tk 2 3# rootウィンドウの作成 4root = tk.Tk() 5root.title("TkTrain") 6root.geometry("400x300") 7 8# ボタンが配置されたフレーム作成のためのクラスを定義 9class ButtonFrame(tk.Frame): 10 def __init__(self, master=None, bg=None, text=None, width=None, height=None): 11 super().__init__(master, bg=bg, width=width, height=height) 12 self.button = tk.Button(self, text=text) 13 self.button.grid(row=0, column=0, sticky="nsew") 14 15 def switch_frame(self, new_frame): 16 self.place_forget() 17 new_frame.grid(row=0, column=0, sticky=tk.NSEW) 18 19# frame1のインスタンス化及びボタンコマンドの設定 20frame1 = ButtonFrame(root, bg="red", text = "button1", width=200, height=300) 21frame1.button["command"] = lambda: frame1.switch_frame(frame2) 22 23# frame2のインスタンス化及びボタンコマンドの設定 24frame2 = ButtonFrame(root, bg="blue", text = "button2", width=200, height=300) 25frame2.button["command"] = lambda: frame2.switch_frame(frame1) 26 27# frame1の初期配置 28frame1.grid(column=0, row=0, sticky=tk.NSEW) 29 30# メインループ(gridの行列が2以上になった時用にfor文で記述しています。) 31for i in range(1): 32 root.grid_columnconfigure(i, weight=1) 33 34for i in range(1): 35 root.grid_rowconfigure(i, weight=1) 36 37root.mainloop()
試したこと
一応いろいろ試した結果これになった状況です。
エラーも表示されないのでこれ以上進めなくなってここに来ました。
補足情報(FW/ツールのバージョンなど)
特になし。
回答1件
あなたの回答
tips
プレビュー