当我单独设置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()
结果如下
但是当我将这段代码放到类中去就出现了如下问题,不管有没有选中,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()
我就是希望能够通过选中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
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!