Tkinter复选框状态控制Toplevel文本框内容问题求助
问题解决:根据复选框状态在Toplevel文本框显示对应内容
问题根源
- 局部变量覆盖全局变量:
check_checkbox函数里重新定义了局部的testVar,完全没修改全局的testVar,导致点击按钮时传递的是空值。 - 缺少基础导入:代码开头没导入
tkinter as tk,运行会直接报错。 - 冗余的文本插入写法:
f""+testVar+""属于多余写法,直接使用变量名即可。
修正后的代码
import tkinter as tk from tkinter import ttk import tkinter.scrolledtext as st root = tk.Tk() root.geometry("100x100") root.title("Test") def check_checkbox(): # 直接更新全局的testVar,而非创建局部变量 if isChecked.get() == 1: testVar.set("apple") else: testVar.set("orange") print(testVar.get()) def new_win(content): win = tk.Toplevel(root) win.geometry("100x100") win.title("Test 2") win_txt_box = st.ScrolledText(win, height=50, width=50) win_txt_box.pack() # 直接插入传入的内容 win_txt_box.insert("1.0", content) testVar = tk.StringVar() isChecked = tk.IntVar() # 复选框 check_box = ttk.Checkbutton(root, text="CHECK THIS", command=check_checkbox, variable=isChecked, onvalue=1, offvalue=0,) check_box.grid(column=0, row=0) # 按钮 test_button = ttk.Button(root, text="CLICK THIS", command=lambda: new_win(testVar.get())) test_button.grid(column=0, row=1) root.mainloop()
修改说明
- 补上
import tkinter as tk,解决基础依赖问题。 - 把
check_checkbox里创建局部testVar的逻辑改成testVar.set(),直接更新全局变量的值。 - 简化
new_win里的文本插入代码,去掉冗余的字符串拼接写法。
内容的提问来源于stack exchange,提问作者Zedrick Castro
相关产品推荐
相关产品推荐

