You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tkinter中实现跨类调用复选框全选功能?

解决方案

要实现Win1窗口的"AUTO"按钮选中Win3所有复选框并跳转Win2的功能,只需对代码做以下关键修改:

修改后的完整代码

from tkinter import *
import tkinter as tk

class Win1(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        Label(self, text= "ISMC", font= ('Helvetica 20 bold')).pack(padx=5, pady=5)
        # 调整AUTO按钮逻辑:先选中Win3所有复选框,再跳转Win2
        b1=Button(self, text="AUTO", command=lambda: [controller.frames[Win3].select_all(), controller.show_frame(Win2)]).pack(padx=5, pady=5)

class Win2(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        b1=Button(self, text= "button 1", command=lambda:controller.show_frame(Win3)).pack(padx=5, pady=5)
        b2=Button(self, text= "button 1").pack(padx=5, pady=5)
        b3=Button(self, text= "button 3").pack(padx=5, pady=5)
        b4=Button(self, text= "PROCEED").pack(padx=5, pady=5)
        b5=Button(self, text= "BACK", command=lambda:controller.show_frame(Win1)).pack(padx=5, pady=5)

class Win3(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        val_x=0
        val_y=10
        self.vars = []
        self.array = []
        for i in range(3):
             self.array.append("RELAY " + str(i+1))
             self.vars.append(StringVar())
             self.vars[-1].set(0)
             Checkbutton(self, text=self.array[i], variable=self.vars[-1], onvalue=1, offvalue=0).place(x=val_x, y=val_y)
             val_y=val_y+50
        
        # 新增选中所有复选框的方法
        def select_all(self):
            for var in self.vars:
                var.set(1)
        
        b1=Button(self, text="back", bg="red", fg="white", command=lambda:controller.show_frame(Win2)).place(x=30,y=140)
        b2=Button(self, text="proceed", bg="green", fg="white").place(x=30,y=160)
        # 给Win3自带的Select All按钮绑定选中功能
        b3=Button(self, text= "Select All", command=self.select_all).place()

class Application(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        window = tk.Frame(self)
        window.pack(side = "top", fill = "both", expand = True)
        self.frames = {}
        for F in (Win1, Win2, Win3):
            frame = F(window, self)
            self.frames[F] = frame
            frame.grid(row = 0, column=0, sticky="nsew")
        self.show_frame(Win1)
        
    def show_frame(self, window):
        frame = self.frames[window]
        frame.tkraise()
        self.title("Test") 
        self.geometry('1500x1500')
        
app = Application()
app.mainloop()       

核心修改说明

  • 给Win3添加select_all方法:遍历保存复选框状态的self.vars列表,将每个变量的值设为1,对应复选框的选中状态。
  • 调整Win1的AUTO按钮命令:通过controller.frames[Win3]获取Win3的实例,先调用其select_all方法,再执行跳转Win2的操作,用lambda表达式实现多步骤执行。
  • (可选)完善Win3的Select All按钮:给Win3自带的按钮绑定select_all方法,让它也具备选中所有复选框的功能。

点击Win1的AUTO按钮后,Win3的所有复选框会被自动选中,随后跳转到Win2窗口。

内容的提问来源于stack exchange,提问作者user20623107

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:45:15