1

我正在为 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)
4

2 回答 2

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(至少据我所知),但我只是阅读了文档!;-)

.delete(first, last=None) 从小部件中删除字符,从 index first 处的字符开始,直到但不包括 last 位置处的字符。如果省略第二个参数,则仅删除第一个位置的单个字符。

和:

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

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

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

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

于 2013-06-13T16:12:10.773 回答
0
  • 将全局变量移至实例属性。( number, tries)。
  • 通过调用 .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()
于 2013-06-13T16:26:49.670 回答