【问题标题】:Tkinter Checkbuttons not changing the variable valueTkinter Checkbuttons不改变变量值
【发布时间】:2020-01-20 13:48:12
【问题描述】:

我使用 Tkinter 的技能每天都在提高,我不敢相信与两周前相比,我已经进步了多少。

现在我的问题是我无法使 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()

【问题讨论】:

  • 鉴于您只想一次选择一项,Radiobutton 小部件不是更合适吗?
  • 您的BooleanVars 都是局部变量,因此会在runp() 完成时消失。引用已删除 var 的 Checkbutton(或 Radiobutton)将无法正常工作,因为它无处存储其状态。

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


【解决方案1】:

你需要通过创建Toplevel的实例来创建子窗口:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-05
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2022-11-02
    相关资源
    最近更新 更多