..415 2022-03-14 17:27 采纳率: 100%
浏览 98
已结题

将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名称

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

  • 写回答

3条回答 默认 最新

  • CSDN专家-HGJ 2022-03-14 19:56
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月22日
  • 已采纳回答 3月14日
  • 创建了问题 3月14日

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作