使用guizero和文本数据文件创建GUI



因此,我试图通过阅读包含问题、选项和答案的文本文件来帮助学生了解如何创建一个简单的测验。他希望使用guizero,而不是简单的内置input((和print((函数。

我希望他避免为每个问题创建单独的检查函数,但我对guidero没有太多经验。我一直在阅读手册页面,下面的代码近似于我们试图实现的目标,但不起作用,因为selected_value直到程序运行后才定义。我是不是走错路了?

from guizero import App, Text, ButtonGroup
app = App(title="Quiz Test", height=800, width=600)
def check_answer(selected_value, answer):
if selected_value == answer:
result.value = "Correct"
else:
result.value = "Wrong"
question_data = []
data_file = open("quiz_ques.txt", 'r')
for line in data_file.read().splitlines():
question_data = line.split(", ")
question_data.reverse() ; question = question_data.pop()
question_data.reverse() ; answer = question_data.pop()
q_options = question_data

text = Text(app, text=question)
choice = ButtonGroup(app, options=q_options, selected=1, command=check_answer, args=[selected_value, answer])
result = Text(app)
data_file.close()
app.display()

尝试更改

command=check_answer()

command=check_answer

在最初的版本中,您一定义程序就调用check_answer()。。。在第二个版本中,只有点击按钮才会调用它

我为任何寻找解决方案的人使用了几个列表来解决这个问题。更像python专家的人可能会使用一些python习语、内置函数或标准模块来简化这一点,但这种解决方案即使有点破解也能奏效。欢迎对此进行改进。:(

from guizero import App, Text, ButtonGroup
app = App(title="Quiz Test", height=800, width=600) 
def check_answer(answer, result, cnt):
if choices[cnt].value == answer:
result.text_color = 'green'
result.value = "Correct"
update_score()
else:
result.text_color = 'red'
result.value = "Wrong"
update_score()

def update_score():
score = 0
for result in results:
if result.value == "Correct":
score += 1 
score_txt.value = "Score: " + str(score)
question_data = []
data_file = open("quiz_ques.txt", 'r')
cnt = 0 
results = []
choices = []
for line in data_file.read().splitlines():
question_data = line.split(", ")
question_data.reverse() ; question = question_data.pop()
question_data.reverse() ; answer = question_data.pop()
q_options = question_data

question = Text(app, text=question)
question.text_color = 'white'
results.append(Text(app))
choices.append(ButtonGroup(app, options=q_options, command=check_answer, args=[answer, results[cnt], cnt]))
cnt += 1 
score_txt = Text(app, color='white', size=40)
data_file.close()
app.display()

最新更新