从函数而不是按钮命令调用 Tkinter 框架控制器 [英] Calling Tkinter frame controller from function rather then button command

查看:46
本文介绍了从函数而不是按钮命令调用 Tkinter 框架控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有以下内容,效果很好:

So I have the following, which works perfectly:

import tkinter as tk

class App(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        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 F in (LoginPage, ProjPage):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, rowspan=12, columnspan=6, sticky="nsew")

        self.show_frame(LoginPage)

    def show_frame(self, c):
        frame = self.frames[c]
        frame.tkraise()

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

        Btn = tk.Button(self, text="Sign In", command=lambda: controller.show_frame(ProjPage))

但我希望最后一个按钮命令在一个单独的函数中,所以我可以先做一些评估:

But I want that last button command to be in a separate function, so I can do some evaluations first:

        Btn = tk.Button(self, text="Sign In", command=self.signIn)

    def signIn(self):
        # do some stuff here
        self.controller.show_frame(ProjPage)

这不起作用;无论我是尝试传递控制器还是使用 lambda,似乎都没有任何效果 >.<我没有得到什么?

This doesn't work; regardless if I try to pass the controller, or use a lambda, nothing seems to work >.< What am I not getting?

推荐答案

您似乎没有在 self 中初始化 controller.将其放在 LoginPage__init__ 中,如下所示:

You don't seem to initialize controller in self. Put it there in __init__ of LoginPage, like so:

self.controller = controller

这篇关于从函数而不是按钮命令调用 Tkinter 框架控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆