为数字猜谜游戏创建重置按钮

时间:2013-06-13 15:44:18

标签: python tkinter

我正在为Python教程做一个数字猜谜游戏。我是Python新手,使用Python Shell和2.7.5版。我已经完成了除此之外的所有功能。

我必须制作一个重置按钮,这让我心烦意乱。我不知道如何定义它。

self.reset_bttn = Button(self, text = "Starta om", command=reset)
        self.reset_bttn.grid(row = 6, column = 1, sticky = W)

def reset():
        global

这是带有一些标签的代码的开头。

from Tkinter import *
import random
number = random.randrange (100) + 1
tries = 0
class Application(Frame):

    def __init__(self, master):

        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()


    def create_widgets(self):

        self.inst_lbl = Label(self, text = "Följ alla stegen")
        self.inst_lbl.grid(row = 0, column = 0, columnspan = 2, sticky = W)

        self.name_lbl = Label(self, text = "Spelarens namn: ")
        self.name_lbl.grid(row = 1, column = 0, sticky = W)

        self.name_ent = Entry(self)
        self.name_ent.grid(row = 1, column = 1, sticky = W)

        self.guess_lbl = Label(self, text = "Skriv in din gissning.")
        self.guess_lbl.grid(row = 2, column = 0, sticky = W)

        self.guess_ent = Entry(self)
        self.guess_ent.grid(row = 2, column = 1, sticky = W)

        self.gap1_lbl = Label(self, text = " ")
        self.gap1_lbl.grid(row = 3, column = 0, sticky = W)

2 个答案:

答案 0 :(得分:1)

您可能希望将以下内容添加到Application类中:

class Application(Frame):
    # ... all the stuff you've copied in your question
    def create_widgets(self):
        # ... all the stuff again
        self.reset_bttn = Button(self, text = "Starta om", command=self.reset)

    def reset(self):
        self.name_ent.delete(0, tk.END)
        self.guess_ent.delete(0, tk.END)
        # ... more stuff to be reset here

我没有对此进行测试,从未完成tkinter(至少据我记得),但我只是阅读了documentation! ; - )

  

.delete(first,last = None)     删除窗口小部件中的字符,从索引优先的字符开始,最后但不包括最后位置的字符。如果省略第二个参数,则仅删除第一个位置的单个字符。

  

窗口小部件显示的文本中的位置作为索引给出。有几种方法可以指定索引:

     
      
  • 作为普通的Python索引,从0开始。
  •   
  • 常量tk.END是指现有文本之后的位置。
  •   

哦,我觉得有必要补充一点,永远不会使用全局变量。使用它们没有充分的理由或情况。除非你想制作一个难以阅读和维护的丑陋代码。

您应该将这些全局变量作为成员推送到类中。

答案 1 :(得分:0)

  • 将全局变量移动到实例属性。 (numbertries)。
  • 通过调用.delete(0,END)重置文本条目。

# coding: utf-8

from Tkinter import *
import random

class Application(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()
        self.reset()

    def create_widgets(self):
        self.inst_lbl = Label(self, text = "Följ alla stegen")
        self.inst_lbl.grid(row=0, column=0, columnspan=2, sticky=W)

        self.name_lbl = Label(self, text="Spelarens namn: ")
        self.name_lbl.grid(row=1, column=0, sticky=W)

        self.name_ent = Entry(self)
        self.name_ent.grid(row=1, column=1, sticky=W)

        self.guess_lbl = Label(self, text="Skriv in din gissning.")
        self.guess_lbl.grid(row=2, column=0, sticky=W)

        self.guess_ent = Entry(self)
        self.guess_ent.grid(row=2, column=1, sticky=W)

        self.reset_bttn = Button(self, text="Starta om", command=self.reset)
        self.reset_bttn.grid(row=6, column=1, sticky=W)

    def reset(self):
        self.number = random.randint(1, 100)
        self.tries = 0
        self.name_ent.delete(0, END)
        self.guess_ent.delete(0, END)

root = Tk()
Application(root)
root.mainloop()