【问题标题】:tkinter dynamic Checkbutton pause/return valuetkinter 动态 Checkbutton 暂停/返回值
【发布时间】:2021-10-15 15:30:00
【问题描述】:

我在文本文件中有数据。

AAA
BBB
CCC

111
222
333

!!!
@@@
###

XXX
YYY
ZZZ

读取文件并能够分配字典没有问题。字典由键和对列表组成。选择的随机键之一和相关列表中的随机行将作为问题选取。与标签相关的问题。

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

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

这是我修改后的代码:

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

【问题讨论】:

标签: python python-3.x tkinter


【解决方案1】:

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

Checkbutton 小部件有一个 variable 选项,它允许您将该 Checkbutton 小部件链接到 tkinter IntVar() 整数变量。然后,每当读取或写入 IntVar 时,就可以跟踪 IntVar 以触发回调操作。一旦 Checkbutton 小部件链接到 IntVar,更改 IntVar 的值将更新 Checkbutton 的视觉外观,单击 Checkbutton 将更新 IntVar 的值,触发任何回调函数。

这里是来自https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/checkbutton.html 的 Checkbutton variable 选项的摘录:

跟踪checkbutton当前状态的控制变量; 请参阅第 52 节,“控制变量:小部件背后的值”。 通常这个变量是一个 IntVar,0 表示清除,1 表示 设置,但请参阅上面的 offvalue 和 onvalue 选项。

有关IntVar() 的更多信息,请查看https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/control-variables.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多