Tkinter Checkbuttons不改变变量值

时间:2019-09-19 13:45:37

标签: python python-3.x user-interface tkinter checkbox

我在Tkinter的技能每天都在提高,我不敢相信与2周前相比,我能走多远。

现在我的问题是我无法使Checkbuttons正常工作。出于某种原因,它们始终保持相同的值,无论是否选中它们都无关紧要。

我在另一个脚本中尝试过单独的复选按钮,它们可以正常工作。它们也可以在我的GUI的另一个窗口中工作,但是当我将它们放到窗口中时,它们将停止工作。

您知道为什么会发生这种情况吗?

谢谢! :D

我尝试为检查按钮设置不同的默认值,例如10表示有效,20表示无效,但是变量没有改变,它的值仍然为0。

from tkinter import *


def runp(): 

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


    window = Tk()
    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)

    RwMatrixRadio=Checkbutton(window, text="RwMatrix.Rdata", variable=RwMatrix, command=lambda: cb(RwInfo))
    RwMatrixRadio.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()

1 个答案:

答案 0 :(得分:1)

  

您需要通过创建顶级实例来创建子窗口:

     

window= Tk()更改为window= Toplevel()

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

代码:

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()