0

所以在我的程序中,每当我放置grid_remove()函数时,它通常都会删除小部件。每当我第一次运行程序时(也就是说,不会因为猜错而失去任何分数),它会删除大部分小部件。但是,每当我猜错并拿走分数(效果很好)时,小部件就会懒洋洋地留在窗口上。有什么帮助吗?

这是代码:(我认为错误发生在def numrightand之后的某个地方def wordguess

import random
from tkinter import *
from tkinter import messagebox

text_doc = open("test.txt", "r")
text = text_doc.read()
numbOfletters = len(text)
random_letter = random.randint(0,numbOfletters-1)
letter = text[random_letter]
points = 50
username = ""
is_there = 0

class GUIFramework(Frame):

    def __init__(self,master=None):

        Frame.__init__(self,master)

        self.master.title("Window")
        self.master.geometry("420x75")

        self.grid(padx=10,pady=10)
        self.CreateWidgets()

    def CreateWidgets(self):

        self.lbText = Label(self, text="Would you like to play \"Find the secret letter?\"", font="Verdana")
        self.lbText.grid(row=0, column=0, columnspan = 3)

        self.button = Button(self, text="Yes, please", command=self.next, background = "green")
        self.button.grid(row=1, column=0)

        self.btnDisplay = Button(self, text="No, thanks", command = self.window, background = "red")
        self.btnDisplay.grid(row=1, column=1)

    def window(self):

        self.tl = Toplevel(self)
        self.master.destroy()

    def next(self):

        self.lbText.grid_remove()
        self.button.grid_remove()
        self.btnDisplay.grid_remove()

        self.lbText = Label(self, text="You're currently playing \"Find the secret letter\"", font="Verdana")
        self.lbText.grid(row=0, column=0, columnspan = 10)

        self.username = Label(self, text="Enter your username")
        self.username.grid(row=1, column=0)

        self.enText = Entry(self)
        self.enText.grid(row=1, column=2, columnspan=5)

        self.ok = Button(self, text="OK", command = self.wordguess)
        self.ok.grid(row=1, column=8)


    def wordguess(self):

        global username
        self.master.geometry("420x90")
        username = self.enText.get()

        self.username.grid_remove()
        self.enText.grid_remove()

        self.word = Label(self, text="You have {0} points, enter a word?".format(50))
        self.word.grid(row=1, column=0)

        self.entry = Entry(self)
        self.entry.grid(row=1, column=1, columnspan=4)

        self.ok = Button(self, text="OK", command = self.numright)
        self.ok.grid(row=1, column=8)

    def numright(self):

        global points
        global is_there

        word = self.entry.get()
        word = word.lower()
        is_there = word.count(letter)

        self.lbText.grid_remove()
        self.word.grid_remove()
        self.entry.grid_remove()
        self.enText.grid_remove()
        self.ok.grid_remove()

        if is_there > 4:
            self.master.geometry("200x70")
            self.done = Label(self, text = "Congradulations, you have won!")
            self.done.grid(row = 0, column = 0)

            self.ok = Button(self, text="OK", command = self.window)
            self.ok.grid(row=1, column=0)

        else:
            if (is_there < 5) and (is_there > 0):
                points = points - 5

            else:
                points = points - 10

            self.lbText = Label(self, text="You're currently playing \"Find the secret letter\"", font="Verdana")
            self.lbText.grid(row=0, column=0, columnspan = 10)

            self.numright = Label(self, text="That word has {} secret letters".format(is_there))
            self.numright.grid(row=2, column=0)

            self.word = Label(self, text="You have {0} points, enter a word?".format(points))
            self.word.grid(row=1, column=0)

            self.entry = Entry(self)
            self.entry.grid(row=1, column=1, columnspan=4)



    def scores(self):
        output = open("names.txt", "a")
        output.write("{0:2}      {1} \n".format(str(points), username))
        output.close()
        output = open("names.txt", "r")




if __name__ == "__main__":
    guiFrame = GUIFramework()
    guiFrame.mainloop()
4

1 回答 1

0

您的问题是行(在 numright 方法的 else 子句中):

        self.numright = Label(self, text="That word has {} secret letters".format(is_there))
        self.numright.grid(row=2, column=0)

self.numright 是您的 GUIFramework 类中的一个方法,您可以在此处踩踏并将其重新分配给 Label 字段。此外,您可能必须将 self.ok 按钮放回页面上,因为您在上面将其 grid_removed。我添加了以下几行:

self.ok = Button(self, text="OK", command = self.numright)
self.ok.grid(row=1, column=8)

到 numright 方法的末尾将 OK 按钮放回去。然后我通过制作一个名为 self.numright 的不同方法来摆弄,这就是我发现重新分配错误的方式。

于 2012-05-18T21:57:55.873 回答