代码之家  ›  专栏  ›  技术社区  ›  user1582596

tkinter动态Checkbutton暂停/返回值

  •  0
  • user1582596  · 技术社区  · 4 年前

    我有一个文本文件中的数据。

    AAA
    BBB
    CCC
    
    111
    222
    333
    
    !!!
    @@@
    ###
    
    XXX
    YYY
    ZZZ
    

    读取文件没有问题,并且能够分配dict。dict由密钥和配对列表组成。所选的随机键之一和相关列表中的一条随机线将作为问题出现。与标签关联的问题。

    剩下的元素变成了答案。尝试设置动态复选框,但无法暂停执行。目前,我们的想法是通过 Checkbutton s,如果它是同一对的一部分,它应该移动到下一次迭代。

    我尝试了一些事情,但无法处理返回值。不是我的方法是正确的。我应该使用cmd按钮而不是等待吗 复选按钮 点击?

    enter image description here

    这是我修改后的代码:

    import tkinter
    from tkinter import *
    import random
    
    window = Tk()
    
    def quiz():
            chkValue = IntVar() 
            QL = Label(window,text = (Q), bg = "Blue").pack()
            for x in range(len(cpll[key])):
                chkValue[x] =  Variable()
                print(cpll[key][x])
                QA[x] = Checkbutton(window,text = cpll[key][x],var=chkValue[x], command=nextq).pack()[x],var=chkValue, command=nextq).pack()
    
    def nextq():
            pass
    # Using readlines()
    file1 = open('cpll.txt', 'r')
    lines = file1.readlines()
    cpll ={}
    count = 0
    idx = 0
    
    for line in lines:
        if line == "\n":
            idx +=1
            count += 1
        else:
            cpll.setdefault(idx,[]).append(line.strip())
            count += 1
    
    for key, values in cpll.items():
        print(key)
        
        if(isinstance(values, list)):
            for value in values:
                print(value)
                
        else:
            print(value)
    
    for value in cpll.values():
        print(value)
        
        
    key_list = list(cpll)
    
    random.shuffle(key_list)
    
    d2 = {} 
    
    
    for key in key_list:
    
            d2[key] = cpll[key]
            Q = random.choice(cpll[key])
            cpll[key].remove(Q)        
    
    quiz()
    window.mainloop()
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   GaryMBloom    4 年前

    复选按钮和其他GUI小部件不同步。你不能真的等事情发生,但你总是可以检查一个值。GUI是事件驱动的。因此,您可以随时使用小部件状态的更改来触发操作。

    Checkbutton小部件有一个 variable 选项,它允许您将Checkbutton小部件链接到tkinter IntVar() integer变量。然后那个 IntVar 只要 IntVar 从中读取或写入。一旦Checkbutton小部件链接到 IntVar ,更改IntVar的值将更新Checkbutton的视觉外观,单击Checkbutton将更新的值 IntVar ,触发任何回调函数。

    以下是“检查”按钮的摘录 变量 选项来自 https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/checkbutton.html :

    跟踪检查按钮的当前状态的控制变量; 请参阅第52节,控制变量:小部件背后的值。 通常,此变量是IntVar,0表示已清除,1表示已清除 设置,但请参见上面的offvalue和onvalue选项。

    了解更多信息 IntVar() 退房 https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/control-variables.html