当前位置: 首页 > 知识库问答 >
问题:

数学游戏Tkinter中的Python计时器

景唯
2023-03-14

我想为我的简单数学游戏添加一个计时器。到目前为止,一切都很好,用户在按下按钮时会收到问题,并得到答案的反馈。我想给用户添加一个定时器,让用户看看回答乘法需要多少时间。这是我这个数学游戏原型的最后一部分。我希望定时器在用户点击“NYTT TAL”(瑞典语中的新数字)时启动,在用户点击“SVAR”(瑞典语中的应答)时停止。这是我的密码。

from Tkinter import *
import tkMessageBox
import random
import time
import sys

# Definition for the question asked to user 
def fraga1():
    global num3 
    num3 = random.randint(1, 10)
    global num4 
    num4 = random.randint(1, 10)
    global svar1 
    svar1 = num3 * num4
    label1.config(text='Vad blir ' + str(num3) + '*' + str(num4) + '?')
    entry1.focus_set()


#The answer giving feedback based on answer
def svar1():
   mainAnswer = entry1.get()
   if len(mainAnswer) == 0:
      tkMessageBox.showwarning(message='Skriv in några nummer!')
   return
   if int(mainAnswer) != svar1:
      tkMessageBox.showwarning(message='Tyvärr det rätta svaret: ' + str(svar1))
   else:
      tkMessageBox.showinfo(message='RÄTT!! :)')

#The quit button definition
def quit():
   global root
   root.destroy()

#Definition for the timer this part doesnt work
def start():
   global count_flag 
   fraga1()
   count_flag = True
   count = 0.0
   while True:
      if count_flag == False:
          break
   label['text'] = str(count)
   time.sleep(0.1)
   root.update()
   count += 0.1


#Window code
root = Tk()
root.title("multiplikations tidtagning")
root.geometry('800x500')

count_flag = True

# Welcome message in labels
label2 = Label(root, text="Hej!\n  Nu ska vi lösa lite matteproblem!")
label2.config(font=('times', 18, 'bold'), fg='black', bg='white')
label2.grid(row=0, column=0)

#Instructions how to play in labels

label3 = Label(root, text="Instruktioner!\n  För att starta ett spel tryck på nyttspel") 
label3.config(font=('times', 12, 'bold'), fg='black', bg='white')
label3.grid(row=2, column=2)

#other label
label1 = Label(root)
label1.grid(row=2, column=0)


# entry widget for the start button
entry1 = Entry(root)
entry1.grid(row=3, column=0)

# restart gives a new question
entry1.bind('', func=lambda e:checkAnswer())

#Buttons

fragaBtn = Button(root, text='Nytt tal', command=fraga1)
fragaBtn.grid(row=4, column=0)

svarButton = Button(root, text='Svar', command=svar1)
svarButton.grid(row=4, column=1)


quit_bttn = Button(root, text = "Avsluta", command=quit)
quit_bttn.grid(row=5, column=0)



root.mainloop()

共有3个答案

辛成周
2023-03-14

我可以建议使用线程的其他解决方案

我在一个项目中有一个小计时器,它作为一个不同的线程运行,每秒更新一次:

import threading
import tkinter as tk
import time

root = tk.Tk()
timer = tk.Text(root, width=5, height=1)
timer.insert(tk.INSERT, "00:00")
timer.pack()
def show_time():
    start = time.time()
    seconds = 0
    while True:
        if time.time() - start > 1:
            seconds += int(time.time() - start)
            start = time.time()
            cur_index = timer.index(tk.INSERT)
            cur_index = str(int(cur_index[0]) - 1) + cur_index[1:]
            timer.delete(cur_index, tk.INSERT)
            timer.insert(tk.INSERT, str(int(seconds / 60)) + ":" + str(seconds % 60))
            root.update()
thread = threading.Thread(target=show_time)
thread.start()
鞠嘉志
2023-03-14

使用一个全局变量来存储人员按“开始”时的当前时间。然后,当用户在函数svar中按svar时,只需获取当前时间,将它们彼此相减,就得到了所需的时间,然后将全局var重置为0,这样就得到了所需的时间

郗奇玮
2023-03-14

我想你需要的是这个。

from Tkinter import *
import time

class StopWatch(Frame):  
    """ Implements a stop watch frame widget. """                                                                
    def __init__(self, parent=None, **kw):        
        Frame.__init__(self, parent, kw)
        self._start = 0.0        
        self._elapsedtime = 0.0
        self._running = 0
        self.timestr = StringVar()               
        self.makeWidgets()      

    def makeWidgets(self):                         
        """ Make the time label. """
        l = Label(self, textvariable=self.timestr)
        self._setTime(self._elapsedtime)
        l.pack(fill=X, expand=NO, pady=2, padx=2)                      

    def _update(self): 
        """ Update the label with elapsed time. """
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)

    def _setTime(self, elap):
        """ Set the time string to Minutes:Seconds:Hundreths """
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)                
        self.timestr.set('%02d:%02d:%02d' % (minutes, seconds, hseconds))

    def Start(self):                                                     
        """ Start the stopwatch, ignore if running. """
        if not self._running:            
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1        

    def Stop(self):                                    
        """ Stop the stopwatch, ignore if stopped. """
        if self._running:
            self.after_cancel(self._timer)            
            self._elapsedtime = time.time() - self._start    
            self._setTime(self._elapsedtime)
            self._running = 0

    def Reset(self):                                  
        """ Reset the stopwatch. """
        self._start = time.time()         
        self._elapsedtime = 0.0    
        self._setTime(self._elapsedtime)


def main():
    root = Tk()
    sw = StopWatch(root)
    sw.pack(side=TOP)

    Button(root, text='Start', command=sw.Start).pack(side=LEFT)
    Button(root, text='Stop', command=sw.Stop).pack(side=LEFT)
    Button(root, text='Reset', command=sw.Reset).pack(side=LEFT)
    Button(root, text='Quit', command=root.quit).pack(side=LEFT)

    root.mainloop()

if __name__ == '__main__':
    main()

注:我刚刚在Tkinter中实现了基本的计时器。

 类似资料:
  • 问题内容: 我已经用Java创建了一个游戏,现在我只需要添加一个允许用户在60岁以下玩的计时器。我已经在互联网上进行搜索,找到了swing和util软件包的计时器。您能给我一种方法在我的游戏中使用它吗? 问题答案: 如果您想进行交互,可以使用和类: 因此,现在您有了一个计时器,可以触发另一个类的调用。现在,您可以安排它:

  • 现在我正忙着为我的项目制作图形用户界面。它也需要一个由时间驱动的测试。然而当我按下开始按钮时,计数器开始计数,但是图形用户界面冻结了,所以你不能按下停止按钮。最终程序停止并关闭了它的自我。 看看我的代码: 我将通过我节目的这一部分向大家介绍: 导入用于此目的的库 给我们的while变量timeLoop一个错误的状态 给我们的变量赋值 下面是我们的Def循环用于通过GUI中的窗口移动用于在按下Sto

  • 我对编程游戏相当陌生;我已经3/4完成了,我有一个关于我制作的一个基于文本的小游戏的问题。。。所以在这个游戏中,我的

  • 我的程序应该要求用户猜测 0 到 100 之间的数字,但我似乎无法正确输出。目前,如果用户数大于随机数,它会打印出无限数量的“您的数字太高”。此外,如果第一个 UserGuess 很低,那么以下所有数字都将具有相同的提示:(“您的数字太低”),尽管它们实际上大于随机数。我不知道我做错了什么。任何帮助将不胜感激。谢谢!

  • 最后,是否可以重复使用相同的runnable(每个游戏会话1个),而不是每回合创建一个新的。

  • 本文向大家介绍Python编程中的Hangman游戏,包括了Python编程中的Hangman游戏的使用技巧和注意事项,需要的朋友参考一下 man子手是计算机上的著名游戏,它基本上将计算机生成的单词与您猜到的单词匹配。如果有比赛,您会得到奖励,否则游戏会继续要求新的输入。 在下面的游戏中,用户首先必须输入他们的姓名,然后要求其猜测任何字母。如果随机单词包含该字母,它将以正确的位置显示为输出,否则程