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