tkinter StringVar不更新

以下是我在一个游戏中添加的一个函数,它显示传递给它的分数,并提供再次玩或退出的选项。
如果选择重播,则关闭此tkinter窗口(root.rupt),并再次运行主程序
一切正常,但如果我选择重播选项,下一次游戏结束时,不会显示任何分数。该字段仅保留为空。值仍在传递给函数,我检查了这一点。帮助?

选择 | 换行 | 行号
  1. def endGameMessageTK(score):
  2.     global root
  3.     root=Tk()
  4.     root.title('game over')
  5.     mainframe = ttk.Frame(root, padding="3 3 12 12")
  6.     mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
  7.     scoreString=StringVar()
  8.     scoreString.set(str(score))
  9.     ttk.Label(mainframe, text='game over.  Your socore is: ').grid(column=1, row=1, sticky=(W, E))
  10.     ttk.Button(mainframe, text="Quit", command=tkinterQuit).grid(column=2, row=2, sticky=W)
  11.     ttk.Button(mainframe, text="Replay", command=tkinterReplay).grid(column=1, row=2, sticky=W)
  12.     ttk.Label(mainframe, textvariable=scoreString).grid(column=2, row=1, sticky=(W, E))
  13.     root.mainloop()
# 回答1


很难从不完整的代码片段中区分出来,但问题很可能是根。销毁,因为这是基本的Tkinter实例,销毁它从来都不是一个好主意。取而代之的是使用TopLevel(如果您不想让它显示,则将根删除)并销毁TopLevel,然后创建另一个TopLevel;或者只需将所有值重置为零,而不破坏任何内容,然后重新开始。一个简单的例子:

选择 | 换行 | 行号
  1. try:
  2.     import Tkinter as tk     ## Python 2.x
  3. except ImportError:
  4.     import tkinter as tk     ## Python 3.x
  5.  
  6. class TestIt():
  7.     def __init__(self):
  8.         self.root = tk.Tk()
  9.         self.root.withdraw()
  10.         self.ctr = 0
  11.         self.start_game()
  12.         self.root.mainloop()
  13.  
  14.     def another(self):
  15.         self.top.destroy()
  16.         self.start_game()
  17.  
  18.     def start_game(self):
  19.         self.ctr += 1
  20.         self.top = tk.Toplevel(self.root)
  21.         self.top.geometry("200x75")
  22.         self.top.title("Game # %d" % (self.ctr))
  23.         self.top.grid()
  24.         tk.Label(self.top, text="Game # %d" % (self.ctr)).grid()
  25.         tk.Button(self.top, text="Start New Game",
  26.                   command=self.another).grid()
  27.         tk.Button(self.top, text="Quit",
  28.                   command=self.root.quit).grid()
  29.  
  30. TI=TestIt() 

标签: python

添加新评论