PySimpleGUI - 更新列表项
PySimpleGUI - updating a list item
我正在尝试在 GUI 中做一个简单的琐事测验,但我似乎无法更新 window 以便继续下一个问题。我已经尝试了一段时间,我想出的任何解决方案要么部分起作用,要么使 window 崩溃!想知道是否有人可以告诉我如何更新当前 window 以显示以下问题?
class Question:
def __init__(self, prompt, answer):
self.prompt = prompt
self.answer = answer
questions = [
Question(multiple_choice[0], "D"),
Question(multiple_choice[1], "A"),
Question(multiple_choice[2], "B"),
Question(multiple_choice[3], "C"),
Question(multiple_choice[4], "B"),
Question(multiple_choice[5], "D"),
Question(multiple_choice[6], "C"),
Question(multiple_choice[7], "B"),
Question(multiple_choice[8], "A"),
Question(multiple_choice[9], "A"),
Question(multiple_choice[10], "B"),
Question(multiple_choice[11], "B"),
Question(multiple_choice[12], "B"),
Question(multiple_choice[13], "D"),
Question(multiple_choice[14], "A"),
Question(multiple_choice[15], "C"),
Question(multiple_choice[16], "B"),
Question(multiple_choice[17], "D"),
Question(multiple_choice[18], "B"),
Question(multiple_choice[19], "D")
]
sg.theme("DarkGreen5")
# All the stuff inside your window. This is the PSG magic code compactor...
layout = [[sg.Text()],
[sg.Text(multiple_choice[0])],
[sg.Text("Choose your answer:"), sg.Input()],
[sg.Ok("Submit"), sg.Cancel("End Quiz")]]
# Create the Window
window = sg.Window("Logan's Quiz", layout)
# Event Loop to process "events"
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'End Quiz'):
break
if event == "Submit":
for question in questions:
answer = sg.Input()
if answer == question.answer:
window[multiple_choice[0]].update(multiple_choice[1])
window.close()
这是我目前拥有的!
我省略了这些问题,因为它们对于找出解决方案并不是非常必要的 - 我不相信!
几件事:
- 输入框名称应该是通用名称,例如 'question',因为您将在每个问题中使用该框。
- 使用循环遍历问题列表,在每个正确答案后更新文本框
- 通过问题对象访问问题数据,而不是使用 multiple_choice 列表
试试这个代码:
sg.theme("DarkGreen5")
# All the stuff inside your window. This is the PSG magic code compactor...
layout = [[sg.Text()],
[sg.Text("Question")],
[sg.Text("Choose your answer:"), sg.Input()],
[sg.Ok("Submit"), sg.Cancel("End Quiz")]]
# Create the Window
window = sg.Window("Logan's Quiz", layout)
qcur = 0 # current question
window['Question'].update(questions[qcur].prompt) # first question
# Event Loop to process "events"
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'End Quiz'):
break
if event == "Submit":
answer = sg.Input()
if answer == questions[qcur].answer:
qcur += 1 # next question
if qcur = len(questions): qcur = 0 # restart list
window['Question'].update(questions[qcur].prompt) # show next question
window.close()
我正在尝试在 GUI 中做一个简单的琐事测验,但我似乎无法更新 window 以便继续下一个问题。我已经尝试了一段时间,我想出的任何解决方案要么部分起作用,要么使 window 崩溃!想知道是否有人可以告诉我如何更新当前 window 以显示以下问题?
class Question:
def __init__(self, prompt, answer):
self.prompt = prompt
self.answer = answer
questions = [
Question(multiple_choice[0], "D"),
Question(multiple_choice[1], "A"),
Question(multiple_choice[2], "B"),
Question(multiple_choice[3], "C"),
Question(multiple_choice[4], "B"),
Question(multiple_choice[5], "D"),
Question(multiple_choice[6], "C"),
Question(multiple_choice[7], "B"),
Question(multiple_choice[8], "A"),
Question(multiple_choice[9], "A"),
Question(multiple_choice[10], "B"),
Question(multiple_choice[11], "B"),
Question(multiple_choice[12], "B"),
Question(multiple_choice[13], "D"),
Question(multiple_choice[14], "A"),
Question(multiple_choice[15], "C"),
Question(multiple_choice[16], "B"),
Question(multiple_choice[17], "D"),
Question(multiple_choice[18], "B"),
Question(multiple_choice[19], "D")
]
sg.theme("DarkGreen5")
# All the stuff inside your window. This is the PSG magic code compactor...
layout = [[sg.Text()],
[sg.Text(multiple_choice[0])],
[sg.Text("Choose your answer:"), sg.Input()],
[sg.Ok("Submit"), sg.Cancel("End Quiz")]]
# Create the Window
window = sg.Window("Logan's Quiz", layout)
# Event Loop to process "events"
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'End Quiz'):
break
if event == "Submit":
for question in questions:
answer = sg.Input()
if answer == question.answer:
window[multiple_choice[0]].update(multiple_choice[1])
window.close()
这是我目前拥有的!
我省略了这些问题,因为它们对于找出解决方案并不是非常必要的 - 我不相信!
几件事:
- 输入框名称应该是通用名称,例如 'question',因为您将在每个问题中使用该框。
- 使用循环遍历问题列表,在每个正确答案后更新文本框
- 通过问题对象访问问题数据,而不是使用 multiple_choice 列表
试试这个代码:
sg.theme("DarkGreen5")
# All the stuff inside your window. This is the PSG magic code compactor...
layout = [[sg.Text()],
[sg.Text("Question")],
[sg.Text("Choose your answer:"), sg.Input()],
[sg.Ok("Submit"), sg.Cancel("End Quiz")]]
# Create the Window
window = sg.Window("Logan's Quiz", layout)
qcur = 0 # current question
window['Question'].update(questions[qcur].prompt) # first question
# Event Loop to process "events"
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, 'End Quiz'):
break
if event == "Submit":
answer = sg.Input()
if answer == questions[qcur].answer:
qcur += 1 # next question
if qcur = len(questions): qcur = 0 # restart list
window['Question'].update(questions[qcur].prompt) # show next question
window.close()