python - 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')
解决方案
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)
推荐阅读
- ballerina - 如何制作一个使用服务作为发出事件的方式的对象?
- python-3.x - Pygame 从不同位置导入
- .htaccess - .htaccess 文件中要添加到从 http 重定向到 https 的代码是什么?
- angular - 当我们输入 [Angular] 时如何检测输入字段的变化
- node.js - 为什么 body 是空对象,Express 服务器,方法帖 (2020)
- spring-boot - 如何在 Kubernetes GKE 上部署 Jaeger
- python - 如何通过matplotlib显示每个条形顶部的Y坐标值
- haskell - 构建 Spock 教程示例失败
- python - 在 Jinja2 和 Flask 之间传递自定义 python 对象
- mysql - pymysql.err.InternalError:(1109,“信息架构中的未知表'ALL_PLUGINS'”)