##実現したいこと
https://teratail.com/questions/341873
の質問者です、一応urlを。
python
1canvas.tag_bind(item, "<Button-1>", self.onclick)
問題の文。tag_bindで引数を指定してraiseするページを指定することはできますか?ソースコードを見ていただきたいんですが、ページを変えるプログラムをframeをraiseして行っています。このonclickに引数(上げたいページ)を入れたいです。今後ページが増えても同じ関数を使って中に入れる引数のみ変更したいです。ちなみに引数を指定せずに関数内に特定のページをraiseするプログラムは実行できましたが、下記のソースコードは実行すると
AttributeError: '_tkinter.tkapp' object has no attribute 'frame1'
とでます。そもそもtag_bindに引数を指定できないのか、原因がわかりません。
以下ソースコードです、main_frameのtag_bindのところを見てほしいです。
##ソースコード
python
1#coding:shift-jis 2import tkinter as tk 3import PIL.Image, PIL.ImageTk 4 5class App(tk.Tk): 6 # 呪文 7 def __init__(self, *args, **kwargs): 8 # 呪文 9 tk.Tk.__init__(self, *args, **kwargs) 10 11 # ウィンドウタイトルを決定 12 self.title("Tkinter change page") 13 14 # ウィンドウの大きさを決定 15 self.geometry("800x600") 16 17 # ウィンドウのグリッドを 1x1 にする 18 # この処理をコメントアウトすると配置がズレる 19 self.grid_rowconfigure(0, weight=1) 20 self.grid_columnconfigure(0, weight=1) 21 22#-----------------------------------main_frame----------------------------- 23 24 # メインページフレーム作成 25 self.main_frame = tk.Frame() 26 self.main_frame.grid(row=0, column=0, sticky="nsew") 27 28 # キャンバスにテキストとイベント登録 29 self.main_canvas = tk.Canvas(self.main_frame, width=800, height=600, bg="white") 30 self.main_item = self.main_canvas.create_text(100, 100, text="change", font=('Helvetica', '35')) 31 self.main_canvas.tag_bind(self.main_item, "<Button-1>", self.changePage(self.frame1)) 32 self.main_canvas.pack() 33 34#-------------------------------------------------------------------------- 35#-----------------------------------frame1--------------------------------- 36 37 # 移動先フレーム作成 38 self.frame1 = tk.Frame() 39 self.frame1.grid(row=0, column=0, sticky="nsew") 40 41 # タイトルラベル作成 42 self.titleLabel = tk.Label(self.frame1, text="Frame 1", font=('Helvetica', '35')) 43 self.titleLabel.pack(anchor='center', expand=True) 44 45 # フレーム1からmainフレームに戻るボタン 46 self.back_button = tk.Button(self.frame1, text="Back", command=lambda : self.changePage(self.main_frame)) 47 self.back_button.pack() 48 49#-------------------------------------------------------------------------- 50 51 #main_frameを一番上に表示 52 self.main_frame.tkraise() 53 54 def changePage(self, page): 55 ''' 56 画面遷移用の関数 57 ''' 58 page.tkraise() 59 60 61if __name__ == "__main__": 62 app = App() 63 app.mainloop()
##補足情報
Python 3.7.1
Win
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。