单击按钮后如何继续循环? [英] How to continue a loop after a button has been clicked?

查看:34
本文介绍了单击按钮后如何继续循环?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试暂停循环,然后在按下按钮后继续循环.我有一个 for 循环,它从列表中获取问题,然后将其显示给用户回答,然后在用户回答时继续

I am trying to pause a loop and then continue the loop after a button is pressed. I have a for loop that is fetching questions from a list and then display it for the user to answer,then continue when the user answers

如何在用户单击下一步按钮后继续.这是我下面的代码

how can I make the continue after the user clicks the button next. this is my code below

from tkinter import *
class exam:
    global nexq
    def __init__(self,master):
        self.master = master
        self.master.title("tuples inside Lists")
        self.master.geometry("300x300+0+0")
        self.master.resizable(False,False)
        self.panel = Frame(self.master,width=300,height=300,bg="brown")
        self.panel.pack_propagate(0)
        self.panel.pack(fill="both")
        self.ans = IntVar()
        self.board = Text(self.panel, width=40,height=10)
        self.board.grid(rowspan=2,columnspan=3 )
        self.opt1 = Radiobutton(self.panel,text="Nigeria",variable=self.ans,value=1,command=self.startexam)
        self.opt1.grid(row=5,column=0,sticky=W)
        self.opt2 = Radiobutton(self.panel,text="Ghana",variable=self.ans,value=2)
        self.opt2.grid(row=5,column=2,sticky=W)
        self.btnnext = Button(self.panel,text="next",command=self.nextq)
        self.btnnext.grid(row=20,column=0,sticky=W)

    def startexam(self):
        global nexq
        nexq = False
        self.ans.set(0)
        self.qstns = [('what is your name','john','philip','john'),
                      ('where do you stay','Abuja','lagos','lagos'),
                      ('what can you do','sing','program','program')]
        for qustn,optn1,optn2,ans in self.qstns:
            self.board.delete('1.0',END)
            self.board.insert(END,qustn)
            self.opt1.configure(text=optn1)
            self.opt2.configure(text=optn2)
            if not nexq:
                break
            else:
                continue



    def nextq(self):
        global nexq
        nexq = True
        return True

推荐答案

正如 Reblochon 提到的,您可以使用生成器通过 yield 来实现函数的暂停/恢复.要了解 yield 的工作原理,我强烈建议您阅读 SO 这里.

As mentioned by Reblochon, you can use a generator to achieve pause/resume on a function by using yield. To understand how yield works, I highly recommend you to read through the highest voted Python post on SO here.

以下是使用您的问题作为数据的最小样本:

Below is a minimum sample using your questions as data:

import tkinter as tk

root = tk.Tk()

q = tk.Label(root,text="Question")
b = tk.Spinbox(root)
q.pack()
b.pack()

def ask_question():
    qstns = [('what is your name','john','philip','john'),
             ('where do you stay','Abuja','lagos','lagos'),
             ('what can you do','sing','program','program')]
    for i in qstns:
        yield i[0], i[1:]

a = ask_question()

def get_next():
    try:
        start.config(text="Next question")
        question, answer = next(a)
        q.config(text=question)
        b["value"] = answer
    except StopIteration:
        start.config(text="No more questions!",state="disabled",relief="sunken")

start = tk.Button(root,text="Start",command=get_next)
start.pack()

root.mainloop()

这篇关于单击按钮后如何继续循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆