私は新しい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エラーメッセージはあなたが単にそれを直接呼び出して、コントローラへの参照を保存する必要があり
'lambda:controller.show_frame(CanteenPage)'では、関数を定義して直ちに破棄します。私は 'lambda'を使わずに' controller.show_frame(CanteenPage) 'がほしいと思っています。また、 'login = True'は' login == True'、 'if login'だけでなければなりません –
また、このコードでは' login'も定義されていません。うまくいけば、元のコードで正しいと思います。 – Lafexlos
ええと、確認プロセスを簡略化するために、ログイン==真が追加されました。私のコードにはありません –