【问题标题】:Tkinter global name keeptime not definedTkinter 全局名称保持时间未定义
【发布时间】:2014-06-27 18:26:23
【问题描述】:
import Tkinter
import random
from time import sleep

class simpleapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()


        self.labelVariable = Tkinter.StringVar()
        label = Tkinter.Label(self,textvariable=self.labelVariable,anchor="w",fg="blue",bg="gold")
        label.grid(column=0,row=0,sticky='EW')
        self.labelVariable.set(u"Press button to begin!")


        self.button = Tkinter.Button(self,text=u"Start",
                                command=self.usertypetest(0),fg="black",bg="green")
        self.button.grid(column=2,row=0)


        self.labelVariable2 = Tkinter.StringVar()
        label2 = Tkinter.Label(self,textvariable=self.labelVariable2,anchor="w",fg="blue",bg="gold")
        label2.grid(column=1,row=0,sticky='EW')
        self.labelVariable2.set(u'Time')


        self.entryVariable = Tkinter.StringVar()
        self.entry = Tkinter.Entry(self,textvariable=self.entryVariable,fg="black",bg="white")
        self.entry.grid(column=0,row=1,columnspan=2,sticky='EW')
        self.entryVariable.set(u"")


        self.grid_columnconfigure(0,weight=1)
        self.grid_rowconfigure(0,weight=1)
        self.resizable(True,True)


    def keeptime(num1):
        self.entry.selection_range(0, Tkinter.END)
        timer = num1
        t = 0
        while timer < 1:
            self.labelVariable2.set(t)
            sleep(.01)
            t += .01



    def usertype(self):
        randletter = random.choice('qwer')
        self.labelVariable.set("Press "+randletter)
        userinput = self.entryVariable.get
        while userinput == '':
            pass
        if userinput == randletter:
            return 'Correct'    
        else:
            return 'Incorrect'

    def usertypetest(self,num1):
        keeptime(num1)
        for x in range(20):
            result = usertype()
            print result
            if result == 'Correct':
                y = y+5
            else:
                y = y-2
        timer += 1
        self.labelVariable.set(str(y)+' is your score')






if __name__ == "__main__":
    app = simpleapp_tk(None)
    app.title('LoL Practice')
    app.geometry("700x50")
    app.configure(background='black')
    app.mainloop()

那是我的程序。该程序的目标是,当用户单击开始时,计时器将启动,打印到标签上,并显示从 (Q,W,E,R) 中随机选择的字母,他们必须尽快输入.程序将为他们计时并在最后根据他们的错误给他们打分,并停止计时器。我遇到的问题是它说:

Traceback (most recent call last):
  File "C:/Users/Brett/Documents/shellrunpractice", line 83, in <module>
    app = simpleapp_tk(None)
  File "C:/Users/Brett/Documents/shellrunpractice", line 9, in __init__
    self.initialize()
  File "C:/Users/Brett/Documents/shellrunpractice", line 22, in initialize
    command=self.usertypetest(0),fg="black",bg="green")
  File "C:/Users/Brett/Documents/shellrunpractice", line 66, in usertypetest
    keeptime(num1)
NameError: global name 'keeptime' is not defined

此问题已修复!

另外,在我进行一些更改之前,代码并没有产生错误,但是当我单击按钮时,程序就挂了。我想知道你们是否可以在我的代码中找到任何其他可能导致这种情况的错误,如果可以,该怎么做。我意识到我的代码很糟糕,我才刚开始使用 Tkinter,我还不完全确定一切是如何工作的。

【问题讨论】:

    标签: python tkinter label global nameerror


    【解决方案1】:

    您实际上应该使用self.keeptime(num1) 而不是keeptime(num1) 来访问类方法,并且您应该使用self 作为keeptime 方法的第一个参数

    def keeptime(self,num1):
        self.entry.selection_range(0, Tkinter.END)
        timer = num1
        t = 0
        while timer < 1:
            self.labelVariable2.set(t)
            sleep(.01)
            t += .01 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2018-05-04
      • 2015-12-22
      • 2014-04-18
      相关资源
      最近更新 更多