首页 > 解决方案 > Tkinter 复选框按钮更改 tk.Button 命令

问题描述

我正在尝试使用复选框的输入更改“继续”按钮将用户带到 Tkinter GUI 的页面。现在,所有三个页面都显示在一页中。

从初始化 Tkinter 开始

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

        tk.Tk.__init__(self, *args, **kwargs)#initialized tkinter
        container = tk.Frame(self)#define our tkinter container

        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 (StartPage, PageOne, PageTwo):            
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row =0, column =0, sticky ="nsew")

        self.show_frame(StartPage)

        def show_frame(self, cont):

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

然后创建起始页

    class StartPage(tk.Frame):

        def __init__(self, parent, controller):

            tk.Frame.__init__(self, parent)

            chk_state = tk.BooleanVar()
            chk_state.set(False)#uncheck
            chk = tk.Checkbutton(self, text = "Select a slice range",font =(20), var=chk_state)#, command = click())
            chk.place(relx=.5,rely=.39,anchor='center')

            def browsefunc3():
                if chk_state == False:
                    command = lambda: self.controller.show_frame(PageOne)
                else:
                    command = lambda: self.controller.show_frame(PageTwo)
                return command
            button3 = tk.Button(text="Continue", bg = "white", fg = 'black',font=(20), command = lambda: browsefunc3())
            button3.place(relx=.5, rely =.75, anchor='center')

然后写另外两页

    class PageOne(tk.Frame):
        def __init__(self, parent, controller):
            tk.Frame.__init__(self, parent)
            button3 = tk.Button(text="One", bg = "white", fg = 'black',font=(20), command = lambda: self.controller.show_frame(StartPage))
            button3.place(relx=.5, rely =.75, anchor='center')

    class PageTwo(tk.Frame):
        def __init__(self, parent, controller):
            tk.Frame.__init__(self, parent)
            button3 = tk.Button(text="Two", bg = "white", fg = 'black',font=(20), command = lambda: self.controller.show_frame(StartPage))
            button3.place(relx=.5, rely =.75, anchor='center')

标签: pythontkinter

解决方案


Tkinter 变量不像 python 变量那样工作。您需要使用该get()方法来获取值。此外,您不需要额外的关闭;直接调用函数即可。

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

        self.chk_state = tk.BooleanVar(value=False)#uncheck
        chk = tk.Checkbutton(self, text = "Select a slice range",font =(20), var=self.chk_state)
        chk.place(relx=.5,rely=.39,anchor='center')

        button3 = tk.Button(text="Continue", bg = "white", fg = 'black',font=(20), command = self.browsefunc3)
        button3.place(relx=.5, rely =.75, anchor='center')

    def browsefunc3(self):
        if self.chk_state.get():
            self.controller.show_frame(PageTwo)
        else:
            self.controller.show_frame(PageOne)

推荐阅读