from Tkinter import *
import Tkinter as tk
import tkMessageBox
import time
import re
import string
from random import randint
print "Hangman v1.7 - by Josh & Paul"
bsrly2 = False
bsrly = False
notlie = True
turns = 8
rec = ''
exp = '^[a-z]+$'
textfile = open('dictionary.txt', 'r')
words = textfile.read().split()
n = randint(0, len(words)-1)
word = words[n]
x = 0
w = list(word)
guess = ''
bs = ''
for letter in word:
if letter in guess:
bs += letter + ' '
else:
bs += '_ '
bs = bs.upper()
def MainProgram():
global ui
global guess
global turns
global rec
global bs
global bsrly
global bsrly2
bs = ''
inp = ui.get().strip()
inp = inp.lower()
ui.delete(0, END)
if bsrly2 == True:
root.quit()
if inp == "":
tkMessageBox.showerror("Incorrect Entry", "Error: Please enter a letter")
elif len(inp) > 1:
tkMessageBox.showerror("Incorrect Entry", "Error: Please enter one letter")
elif inp in guess:
tkMessageBox.showerror("Incorrect Entry", "Error: You have already tried that letter")
elif not re.match(exp, inp):
tkMessageBox.showerror("Incorrect Entry", "Error: Please enter a letter")
else:
if inp not in word:
turns -= 1
if turns == 7:
img.configure(image=image0)
if turns == 6:
img.configure(image=image1)
if turns == 5:
img.configure(image=image2)
if turns == 4:
img.configure(image=image3)
if turns == 3:
img.configure(image=image4)
if turns == 2:
img.configure(image=image5)
if turns == 1:
img.configure(image=image6)
guess += ' ' + inp
if turns == 0:
img.configure(image=image7)
bsrly2 = True
if inp not in word:
upd.configure(text= "Wrong, try again")
rec += ' ' + inp
if inp in word:
upd.configure(text= "Thats correct!")
guess2 = rec.upper()
fb2.configure(text = "Wrong letters:" + guess2)
wait = 0
left = 0
for letter in word:
if letter in guess:
bs += letter + " "
else:
bs += '_ '
left += 1
bs = bs.upper()
if left == 0:
bsrly = True
feedback.configure(text=bs)
bs = ''
if bsrly2 == True:
root
upd.configure(text="You lose, the word was " + word)
check()
def check():
if bsrly == True:
root.destroy()
root2 = Tk()
root2.wm_iconbitmap('hmn.ico')
root2.title("You Win!")
youwin = tk.PhotoImage(master=root2, file="YouWin.gif")
winer = Label(master=root2, image=youwin)
winer.image = youwin
winer.grid(row=0, rowspan=20)
wanaquit = Label(master=root2, text="Play Again?")
wanaquit.grid(row=21)
pbuton = Button(master=root2, text="Yes", command=root2.destroy)
pbuton.grid(row=22)
root2.mainloop()
root = Tk()
root.wm_iconbitmap('hmn.ico')
root.title("Hangman v1.7")
image = tk.PhotoImage(file="image.gif")
image0 = tk.PhotoImage(file="image0.gif")
image1 = tk.PhotoImage(file="image1.gif")
image2 = tk.PhotoImage(file="image2.gif")
image3 = tk.PhotoImage(file="image3.gif")
image4 = tk.PhotoImage(file="image4.gif")
image5 = tk.PhotoImage(file="image5.gif")
image6 = tk.PhotoImage(file="image6.gif")
image7 = tk.PhotoImage(file="image7.gif")
content = tk.Frame(root, bg='black')
namelbl = tk.Label(content, text="Enter a letter:", bg="black", fg="green")
feedback = tk.Label(content, text=bs, bg="black", fg="green")
rb = tk.Checkbutton(content, text="Music", bg="black", fg="green")
slave = tk.Label(content, text="", bg="black", fg="green")
slave2 = tk.Label(content, text="", bg="black", fg="green")
upd = tk.Label(content, text="", bg="black", fg="green")
fb2 = tk.Label(content, text="Used letters:", bg="black", fg="green")
ui = tk.Entry(content)
ui["width"] = 2
img = tk.Label(master=content, image=image, bg="black")
ok = tk.Button(content, text="Okay", bg="black", fg="green", command=MainProgram)
ui.focus()
ui.bind('<Return>', (lambda e: MainProgram()))
content.grid(column=0, row=0)
img.grid(column=0, row=0, columnspan=4)
feedback.grid(column=0, row=1)
fb2.grid(column=0, row=2)
slave.grid(row=3)
slave2.grid(row=5)
upd.grid(row=4, columnspan=4)
namelbl.grid(column=0, row=6)
ui.grid(column=1, row=6, sticky=W)
ok.grid(column=1, row=6)
rb.grid(row=7)
root.mainloop()
嘿所有人,我很快就要完成一项学校作业,即制作带有GUI的Hangman程序。
一切都在顺利进行,除非我不明白如何在You Win窗口中单击是时重启脚本?
答案 0 :(得分:0)
将程序逻辑放入模块顶层将其置于功能中。完成后,您只需再次调用您的函数即可。使用现在的代码结构,无法重新启动程序(好吧,至少在没有编写另一个程序的情况下)。
修改强>
实施例。将此代码封装在函数中:
print "Hangman v1.7 - by Josh & Paul"
bsrly2 = False
bsrly = False
notlie = True
turns = 8
rec = ''
exp = '^[a-z]+$'
textfile = open('dictionary.txt', 'r')
words = textfile.read().split()
n = randint(0, len(words)-1)
word = words[n]
x = 0
w = list(word)
guess = ''
bs = ''
for letter in word:
if letter in guess:
bs += letter + ' '
else:
bs += '_ '
bs = bs.upper()
上面的代码会产生功能:
def start():
print "Hangman v1.7 - by Josh & Paul"
bsrly2 = False
bsrly = False
notlie = True
turns = 8
rec = ''
exp = '^[a-z]+$'
textfile = open('dictionary.txt', 'r')
words = textfile.read().split()
n = randint(0, len(words)-1)
word = words[n]
x = 0
w = list(word)
guess = ''
bs = ''
for letter in word:
if letter in guess:
bs += letter + ' '
else:
bs += '_ '
bs = bs.upper()
至于在函数之间传递变量,如果你没有多少时间,你可以坚持使用全局变量,但最好将所有结果函数放入一个类并使用实例变量。