首页 > 解决方案 > 为什么我的计时器循环只在 tkinter python 中发生一次?

问题描述

我认为问题在于定时器循环只发生一次。我正在尝试循环乐谱并将其呈现在第二个屏幕上,用新乐谱替换旧乐谱。屏幕显示循环经过的内容,但循环只发生一次。该程序的主要目标是创建 2 个屏幕。第一个屏幕要求输入首字母。当第一个屏幕点击“开始游戏”时,将弹出第二个屏幕。然后第二个屏幕将显示姓名缩写和分数。问题是分数只会循环一次。

这是代码:

import tkinter as tk
from time import sleep
import addscore as a
import numpy as np
#from addscore import AddScore as add
#from addscore import SubstractScore as subtract
#from addscore import GameOver as over
LARGE_FONT=("Verdana", 20)

class App():

    def __init__(self):

        def RunningScore():
            global scoreObject
            scoreObject=tk.StringVar()
            score=0
            scoreObject.set(999)
            initial=entry.get()
            global top
            top=tk.Toplevel(bg='red')
            top.geometry('600x800')
            frame = tk.Frame(top, bg='gray', bd=5)
            frame.place(relx=0.5, rely=0.1, relwidth=0.75, relheight=0.6, anchor='n')
            lbl=tk.Label(frame,textvariable=scoreObject, font=LARGE_FONT)
            lbl.place(relx=.47,rely=.5)
            lbl3=tk.Label(frame,text=score, font=LARGE_FONT)
            lbl3.place(relx=.47,rely=.7)

            lbl2=tk.Label(top,text=initial, font=LARGE_FONT)
            lbl2.place(relx=.45,rely=.1)
            top.after(50,lambda:UpdateScore(lbl3))
            frame.tkraise()
            top.mainloop()
        def UpdateScore(lbl3):
            score1=int(scoreObject.get())
            print(f'Before call score: {scoreObject.get()}')
            print(f'inside update: {score1}')
            #score1=a.AddScore(score1)
            score1=score1+5
            scoreObject.set(score1)
            lbl3['text']=score1
            print(f'After call score: {scoreObject.get()}')


        def LeaderBoard():
            top=tk.Toplevel(bg='blue')
            top.geometry('500x500')
            lbl=tk.Label(top,text="LeaderBoard")
            lbl.place(relx=.5,rely=.5)
            top.after(5000,lambda:top.destroy())

        root=tk.Tk()
        canvas=tk.Canvas(root, height=600, width=800)
        canvas.pack()
        background_image= tk.PhotoImage(file='ncstate.gif')
        background_label = tk.Label(root, image=background_image)
        background_label.place(relwidth=1, relheight=1)

        frame = tk.Frame(root, bg='gray', bd=5)
        frame.place(relx=0.5, rely=0.1, relwidth=0.75, relheight=0.2, anchor='n')

        entry="Input Initials"
        entry=tk.Entry(frame,textvariable=entry, font=40)
        entry.place(rely=0.33, relwidth=0.4, relheight=.5, relx=.2)

        inputinitial=tk.Label(frame, text='Input Initials')
        inputinitial.place(relx=0.03, relheight=.5, rely=0.33)


        startbutton=tk.Button(frame, text="Start Game", command= lambda: RunningScore())
        startbutton.place(relx=0.67, rely=0.33, relwidth=.3, relheight=.5)

        lbbutton=tk.Button(root, text="Show Leader Board", command=LeaderBoard)
        lbbutton.place(rely=.75, relx=.37, relwidth=.25, relheight=.2)


    def quit(self):
        self.root.destroy() 

app = App()
app.mainloop() 

标签: pythontkinter

解决方案


推荐阅读