2016-11-18 13 views
0

私は新しいoopです。私はいくつかの援助をしたいと思います。私はラムダを使用してフレームを変更するプロセスを初期化しますが、クラス内の関数(メソッド)の中でラムダを使用することはできません。oopを使ってフレーム間を切り替えるtkinter

これは通常canteenpageに変更するために働くラムダは、次のとおりです。コードの https://www.youtube.com/watch?v=jBUpjijYtCk&t=4s&list=PLQVvvaa0QuDclKx-QpC9wntnURXVJqLyk&index=4

オリジナル版::私はこのチュートリアルを使用している

lambda: controller.show_frame(CanteenPage) 

Switch between two frames in tkinter

コード:

import tkinter as tk 
from tkinter import ttk 

class CashlessService(tk.Tk): 

    def __init__(self, *args, **kwards): 

     tk.Tk.__init__(self, *args, **kwards) 

     tk.Tk.wm_title(self, "CashlessService") 


     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand = True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 

     self.frames = {} 

     for i in (LoginPage, CanteenPage, AdminPage, StudentPage): 

      frame = i(container, self) 

      self.frames[i] = frame 

      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(LoginPage) 

def show_frame(self, cont): 

    frame = self.frames[cont] 
    frame.tkraise() 


class LoginPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 

     #Button to confirm ID and password 
     ttk.Button(self, text="Login", command=self.LoginCheck).grid(row=4, column=1) 



    def LoginCheck(self): 
     login = True 
     if login == True: 
      lambda: controller.show_frame(CanteenPage) 

class CanteenPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = tk.Label(self, text="canteen?", font=LARGE_FONT) 
     label.pack(pady=10, padx=10) 

長いリクエストで申し訳ありませんが、私は何時間もこれに固執しています。

P.Sエラーメッセージはあなたが単にそれを直接呼び出して、コントローラへの参照を保存する必要があり

+1

'lambda:controller.show_frame(CanteenPage)'では、関数を定義して直ちに破棄します。私は 'lambda'を使わずに' controller.show_frame(CanteenPage) 'がほしいと思っています。また、 'login = True'は' login == True'、 'if login'だけでなければなりません –

+0

また、このコードでは' login'も定義されていません。うまくいけば、元のコードで正しいと思います。 – Lafexlos

+0

ええと、確認プロセスを簡略化するために、ログイン==真が追加されました。私のコードにはありません –

答えて

1

を表示されません。

class LoginPage(tk.Frame): 

    def __init__(self, parent, controller): 
     self.controller = controller 
     ... 

    def LoginCheck(self): 
     ... 
     if login == True: 
      self.controller.show_frame(CanteenPage) 
+0

ありがとうございました! –

関連する問題