Python Tkinter复选按钮不更改变量值

Python Tkinter复选按钮不更改变量值,python,python-3.x,user-interface,tkinter,checkbox,Python,Python 3.x,User Interface,Tkinter,Checkbox,我的Tkinter技能一天比一天进步,我不敢相信我比两周前进步了多少 现在我的问题是我无法使复选按钮工作。出于某种我无法想象的原因,它们始终保持相同的值,无论是否检查它们 我在另一个脚本中单独尝试了复选按钮,它们工作得非常好。它们也可以在我的GUI的另一个窗口中工作,但是当我将它们放在应该在的窗口中时,它们就停止工作了 你知道为什么会这样吗 谢谢D 我尝试为check按钮设置不同的默认值,比如10表示active,20表示not active,但是变量没有改变,它仍然有一个值0 从tkinter

我的Tkinter技能一天比一天进步,我不敢相信我比两周前进步了多少

现在我的问题是我无法使复选按钮工作。出于某种我无法想象的原因,它们始终保持相同的值,无论是否检查它们

我在另一个脚本中单独尝试了复选按钮,它们工作得非常好。它们也可以在我的GUI的另一个窗口中工作,但是当我将它们放在应该在的窗口中时,它们就停止工作了

你知道为什么会这样吗

谢谢D

我尝试为check按钮设置不同的默认值,比如10表示active,20表示not active,但是变量没有改变,它仍然有一个值0

从tkinter进口* def runp: def cbvari: 打印变量为{0}.formatvari.get 窗口=Tk window.title请选择参数 窗户。几何图形'500x350' labelSelect=Labelwindow,text=要加载哪个Rdata文件?从输出目录 labelSelect.gridcolumn=0,row=11 FastaC=BooleanVar RwMatrix=BooleanVar RwSum=BooleanVar RwInfo=BooleanVar FastaCRadio=Checkbuttonwindow,text=fastacelan.Rdata,variable=FastaC,command=lambda:cbFastaC FastaCRadio.gridcolumn=1,row=11 RwMatrixRadio=Checkbuttonwindow,text=RwMatrix.Rdata,variable=RwMatrix,command=lambda:cbRwInfo RwMatrixRadio.gridcolumn=1,row=12 RwSumRadio=Checkbuttonwindow,text=RwSum.Rdata,variable=RwSum,command=lambda:cbRwSum RwSumRadio.gridcolumn=1,row=13 rwinformadio=Checkbuttonwindow,text=RwInfo.Rdata,variable=RwInfo,command=lambda:cbRwInfo rwinformradio.gridcolumn=1,row=14 window.mainloop master=Tk Buttonmaster,text=RW,command=runp.pack 主回路 您需要通过创建Toplevel的实例来创建子窗口:

将window=Tk更改为window=Toplevel

对于在另一个窗口上打开的窗口,需要使用Toplevel

代码:


鉴于您只希望一次选择一个项目,Radiobutton小部件是否更合适?请阅读有关BooleanVar的内容,它们都是局部变量,因此在runp完成时消失。引用已删除var的Checkbutton或Radiobutton将无法正常工作,因为它无处存储其状态。
from tkinter import *


def runp():

    def cb(vari):
        print ("variable is {0}".format(vari.get()))


    window = Toplevel() # <-------------------
    window.title("Please choose the parameters")
    window.geometry('500x350')

    labelSelect=Label(window, text="Which Rdata file would you like to load? (from output directory)")
    labelSelect.grid(column=0, row=11)

    FastaC=BooleanVar()
    RwMatrix=BooleanVar()
    RwSum=BooleanVar()
    RwInfo=BooleanVar()

    FastaCRadio=Checkbutton(window, text="FastaClean.Rdata", variable=FastaC, command=lambda: cb(FastaC))
    FastaCRadio.grid(column=1, row=11)

    RwSumRadio=Checkbutton(window, text="RwMatrix.Rdata", variable=RwMatrix, command=lambda: cb(RwMatrix))
    RwSumRadio.grid(column=1, row=12)
    RwSumRadio=Checkbutton(window, text="RwSum.Rdata", variable=RwSum, command=lambda: cb(RwSum))
    RwSumRadio.grid(column=1, row=13)
    RwInfoRadio=Checkbutton(window, text="RwInfo.Rdata", variable=RwInfo,command=lambda:cb(RwInfo))
    RwInfoRadio.grid(column=1, row=14)

    window.mainloop()

master=Tk()

Button(master, text="RW", command=runp).pack()

master.mainloop()