将checkbutton设置在类中时,不管选中与未选中的variable值都是0(语言-python)

当我单独设置checkbutton时,能够正常运行

import tkinter as tk 
from tkinter import *
from tkinter import ttk
window = tk.Tk()

columns = ['组序','热丝电流(A)','激光功率','送丝速度','焊接速度','对接间隙','得分']

def check(num):
    print(checkvar[num],'=',checkvar[num].get())

checkvar = [None]*len(columns)#生成一个具有维度的空列表
    
for i in range(len(columns)):
    checkvar[i] = tk.IntVar()
    checkbutton = tk.Checkbutton(window,text=columns[i],variable=checkvar[i],command=lambda x=i: check(x))
    checkbutton.deselect()
    checkbutton.grid(row=i,column=0,sticky='w')

window.mainloop()

结果如下

img

但是当我将这段代码放到类中去就出现了如下问题,不管有没有选中,variable的返回值都为0,如下

import tkinter as tk 
from tkinter import *
from tkinter import ttk

class nonlinear_fit_class:
    def __init__(self):
        #根窗口
        self.root = tk.Tk()
        self.button_nonlinear = tk.Button(self.root,text='非线性拟合',command=self.nonlinear_fit)
        self.button_nonlinear.pack()
        self.root.mainloop()

    #定义非线性拟合函数
    def nonlinear_fit(self):
        window = tk.Tk()

        columns = ['组序','热丝电流(A)','激光功率','送丝速度','焊接速度','对接间隙','得分']

        def check(num):
            print(checkvar[num],'=',checkvar[num].get())

        checkvar = [None]*len(columns)#生成一个具有维度的空列表

        for i in range(len(columns)):
            checkvar[i] = tk.IntVar()
            checkbutton = tk.Checkbutton(window,text=columns[i],variable=checkvar[i],command=lambda x=i: check(x))
            checkbutton.deselect()
            checkbutton.grid(row=i,column=0,sticky='w')
        print(checkvar)

        #button = tk.Button(window,text='应用',command=check).grid(row=1,column=0)

        window.mainloop()
        
A = nonlinear_fit_class()

img

我就是希望能够通过选中checkbutton来索引对应checkbutton的名称,所以想借助variable的值来高速机器我选中了这个button,再获取button名称

能力有限,卡了两天都没解决这个问题,上网没找到类似问题,来这里寻求各位的帮助

还有一种办法是在for循环中对变量设置值:
在第14行与16行之间添加:
checkvar[i].set(i)
输出:PY_VAR0 ~ 0为0~6

终于解决了,是因为有两个tkinter窗口导致IntVar绑定无效,要在IntVar()中加上master参数,原文链接https://blog.csdn.net/qq_36286345/article/details/114637288

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632