回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试使用Tkinter创建一个Hangman游戏GUI。我有完整的工作代码除了几件事。我想创建一个循环,将重新启动按钮按下游戏或退出游戏按“否”。你知道吗</p>
<p>我也希望这些按钮出现在新窗口和关闭窗口之前。你知道吗</p>
<p>我已经删除了代码中不需要的部分,所以您只能看到主要的问题区域和主要思想。要使其正常工作,只需输入“b”,然后输入“o”:</p>
<pre><code>from Tkinter import *
item = "BOO"
oldString = "-" * (len(item))
blank = "-" * (len(item))
guesses = 10
def start():
winMain.destroy()
mainMenu()
def theWinner():
def end():
root.destroy()
def replay():
root.destroy()
mainMenu()
root = Tk()
root.title("HANGMAN GAME DEMO")
answer = Entry(root)
answer.insert(END, "You Won!!! Play again?")
answer.grid(row = 0, column = 0)
yesB=Button(root, text = "Yes", command = replay)
yesB.grid(row = 1, column = 0)
noB = Button(root, text = "Quit", command = end)
noB.grid(row = 1, column = 1)
root.mainloop()
def mainMenu():
def gameOn():
global guesses
global oldString
newString = ""
i = 0
x = len(item)
hanged = ""
readString = answerIn.get().upper()
winner = 1
if readString not in item:
guesses -= 1
elif readString in item:
while x > 0:
if item[i] != readString:
newString = newString + oldString[i]
elif item[i] == readString:
newString = newString + readString
i +=1
x -=1
oldString = newString
out.config(state=NORMAL)
out.delete(0,END)
out.insert(0,oldString);
out.config(state=DISABLED)
answerIn.delete(0,END)
if oldString == item:
win.destroy()
theWinner()
newString = ""
i=0
x=len(item)
answerIn.delete(0,END)
win = Tk()
win.geometry ("665x480")
win.title("HANGMAN GAME DEMO")
win.configure(background='LightBlue2')
#Display of the word user is trying to guess
guessWord = Entry(win, disabledbackground = "mint cream", disabledforeground = "black", font="helvetica 11 bold", width = 12, border = 2)
guessWord.grid(row=1, column=0, pady = 10, padx = 6, sticky = W)
guessWord.insert(END, "The word is: ")
guessWord.config(state = DISABLED)
#guessWord = Label(win, bg = "mint cream", font="helvetica 10 ", text = "The word you have to guess is: ")
guessWord.grid(row=1, column=0, pady = 10, padx = 9, sticky = W)
out = Entry(win, border = 2, font="helvetica 15 bold", width = 12, disabledforeground = "black", disabledbackground = "gold")
out.insert(0,blank);
out.config(state=DISABLED)
out.grid(row=1, column=0, pady = 10, padx = 200, sticky = W)
#Type in Window
answer = Entry(win, disabledbackground = "mint cream", disabledforeground = "black", font="helvetica 10", width = 21, border = 2)
answer.grid(row=2, column=0, pady = 10, padx = 8, sticky = W)
answer.insert(END,"Please type in the letter: ")
answer.config(state=DISABLED)
answerIn = Entry(win,width = 3, border = 2)
answerIn.focus_set()
answerIn.grid(row=2, column=0, pady = 10, padx = 200, sticky = W)
b = Button(win, text = "Enter",command = gameOn, bg = "chartreuse2", font="helvetica 10 bold",)
b.grid(row=2, column=0, pady = 10, padx = 200)
win.mainloop()
winMain = Tk()
winMain.title("HANGMAN GAME DEMO")
imageLabel = Label(winMain, text = "HELLO!")
imageLabel.pack()
winMain.after(1000, start)
winMain.mainloop()
</code></pre>
<p>如果我按“否”,我会得到以下错误:</p>
<pre><code>Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1541, in __call__
return self.func(*args)
File "C:/Python27/8.py", line 69, in gameOn
answerIn.delete(0,END)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2509, in delete
self.tk.call(self._w, 'delete', first, last)
TclError: invalid command name ".94412392"
</code></pre>
<p>如果我按“是”,它似乎不会重新启动游戏从一开始。它只允许我输入一个字符,然后再次打开Win窗口。你知道吗</p>
<p>我哪里出错了,有没有一个快速的解决办法?你知道吗</p>