Добавить элементы в список через 5 секунд в Python - PullRequest
0 голосов
/ 28 сентября 2018

Я написал простую программу, которая создает математические задачи умножения.Я написал его как CLI, однако перешел на GUI, так как некоторые учителя говорили, что CLI слишком мал, чтобы ученики могли его видеть.

Все работает, кроме одного.После нажатия кнопки «Пуск» я хочу обновить список слева новым вопросом через 5 секунд.В CLI-версии я просто добавил sleep (5) , который приостановил программу и затем возобновил ее, однако графический интерфейс пользователя останавливает всю программу и ждет, а затем выплевывает все вопросы.

Если я уберу цикл for, учитель может нажать кнопку 15 раз, но это кажется расточительным.

Вот мой код:

from tkinter import *                
from tkinter import messagebox          
from time import sleep                  
from random import randint

questionList=[]

def main():
    for i in range (15):
        num1= randint(0,12)
        num2 = randint(1,12)
        question = ("Question",(i+1),")",num1,"X",num2)
        listbox.insert(END, question)
        #sleep(5)
        tempArray = []
        tempArray.append(num1)
        tempArray.append(num2)
        questionList.append(tempArray)

def answers ():
    for i in range (len(questionList)):
            ans = (questionList[i][0]*questionList[i][1])
            listbox1.insert(END,ans)

root = Tk()                                                                                         
root.geometry("445x590+460+70")                                                                    
root.title("Maths Machine")                                                                         
label = Label(root, text="Maths Machine", font = ("Arial",16)).grid(row = 0, columnspan = 2)
startButton = Button(root, text = "Start", width = 15, command = main).grid(row = 1, column = 1,padx = 10, pady = 10)
label = Label(root, text = "Questions", font = ("Arial",12)).grid(row  = 2, column = 0)
label = Label(root, text = "Answers", font = ("Arial",12)).grid(row  = 2, column = 1)
listbox = Listbox(root, width = 25, height = 15,font = ("Arial",16))
listbox.grid(row = 3, column = 0)
listbox1 = Listbox(root, width = 10, height = 15,font = ("Arial",16))
listbox1.grid(row = 3, column = 1)
answerButton = Button(root, text ="Show answers", width = 15, command = answers).grid(row = 4, column = 1, padx =10, pady =10)


mainloop()

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Для обновления элементов списка после плача вы можете использовать метод after класса Tk.

Вам нужно вызвать метод main через 5 секунд.

def main():
    num1= randint(0,12)
    num2 = randint(1,12)
    question = ("Question",(len(questionList)+1),")",num1,"X",num2)
    listbox.insert(END, question)
    tempArray = []
    tempArray.append(num1)
    tempArray.append(num2)
    questionList.append(tempArray)
    if len(questionList) < 15:
        root.after(5000, main)
0 голосов
/ 11 октября 2018

Это то, что я сделал, чтобы остановить выполнение моей программы и сохранить паузу.

count=listbox.size()

count+=1
num1= randint(0,12)
num2 = randint(1,12)
question = ("Q",count,")",num1,"X",num2)
listbox.insert(END, question)
tempArray = []
tempArray.append(num1)
tempArray.append(num2)
questionList.append(tempArray)
winsound.Beep(700,1000)
if notWindows == False:
    w=root.after(5000,main)
if listbox.size() == 15:
    root.after_cancel(w)
    answerButton = Button(root, text ="Show answers", width = 15, command = answers).grid(row = 4, column = 1, padx =10, pady =10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...