2014-04-25 147 views
-1

我有一段代码,我已经返回并修复到目前为止。 这是一个数学游戏,产生一个问题;问这个问题;检查它并增加评分。 我仍然是一个初学者,有一个问题,我看到很多人有问题。 虽然我仍然无法弄清楚StringVar()在tkinter入口小部件中的错误

我有一个进入小部件,并希望得到的信息出来,但继续得到错误

可有人出了什么问题,哪里放V = STRINGVAR()以及为什么它是错误的(我想知道为什么)

这是一个WIP游戏,所以请忽略其他错误。 进口的Tkinter为TK 导入随机为r

score = 0 
a = 0 
b = 0 
answer = 0 

def question_gen(): 
    global a 
    global b 
    global answer 
    a = r.randint(0,100) 
    b = r.randint(0,100) 
    answer = (a+b) 

def question_checker(): 
    global score 
    user_input = v.get 
    if user_input == answer: 
     score += 1 
    else: 
     score += 0 

class Demo1: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master).pack() 
     self.label = tk.Label(self.frame, text = 'Welcome To My Wonderful Math Game\n\nHow To Play\n\nWhen you pick a difficulty a new window will pop up\nYou have to answer to the question\nBefore the timer runs out\n\nGood Luck!').pack() 
     self.button1 = tk.Button(self.frame, text = 'Easy', width = 25, command = self.new_window).pack() 
     self.button2 = tk.Button(self.frame, text = 'Hard', width = 25, command = self.new_window).pack() 

    def new_window(self): 
     self.newWindow = tk.Toplevel(self.master) 
     self.app = Demo2(self.newWindow) 

class Demo2: 
    def __init__(self, master): 
     self.master = master 
     self.frame = tk.Frame(self.master).pack() 
     self.label = tk.Label(self.master, text = '{0} + {1} ='.format(a,b)).pack() 
     self.entry = tk.Entry(self.master, textvariable=v).pack() 
     self.quitButton = tk.Button(self.master, text = 'Quit', width = 25, command = self.close_windows).pack() 
    def close_windows(self): 
     self.master.destroy() 

def main(): 
    root = tk.Tk() 
    app = Demo1(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+1

你会得到什么错误? –

回答

1

放在哪里v = StringVar()

你必须商店v在一个地方,你可以在问题检查在录入组件instanciation

  • 达到它

    可能的解决方案包括

    • 在上下文中声明v,因此您可以从中访问它随时随地
    • 声明V作为DEMO2的一个属性,把它作为参数传递给question_checker(听起来不如我,DEMO2责任是这样来显示和检查问题的答案)
    • 声明V作为的属性demo1的,把它作为参数传递给DEMO2构造和question_checker

    顺便说一句,如果你不使用的跟踪功能(在每个变量的变化作出反应)STRINGVAR的,你可以摆脱STRINGVAR

    class Demo2: 
        def __init__(self, master): 
         #[...] 
         self.entry = tk.Entry(self.master) 
         self.entry.pack() 
         #[...] 
        def close_windows(self): 
         #access entry content through 
         self.entry.get() 
    

    另请注意 onelining小部件创建tkinter中的几何错误地初始化您的小部件变量。它将始终包含None,因为pack(和grid)总是返回无。

  • 相关问题