如何重新启动脚本?
问题描述:
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程序。如何重新启动脚本?
一切都运行平稳,除非我不明白我怎么能使脚本重新启动,当他们在您赢得窗口中单击是的?
答
将程序逻辑放入模块顶层将它放入函数中感受不到。一旦你完成了,你只需再次调用你的函数。使用现在的代码结构是不可能重新启动你的程序的(至少在不写入另一个程序的情况下)。
编辑:
实施例。在函数封装这个代码:以上
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()
至于通过你的函数之间的变量可以用全局变量坚持,如果你没有多少时间了,但最好将所有结果函数放入类中并使用实例变量。
+0
你能举个例子吗?对不起,我很可能是这个网站上最大的noob – ThatAussieScripter 2011-03-27 00:50:43
+0
非常感谢你 – ThatAussieScripter 2011-03-27 00:58:31
小心地在网上发布你的作业。它创造了一个同学可能会看到并使用它的最微小的机会。不太可能,但仍然有可能。你也应该更好地给你的变量命名。乍一看,我应该知道什么rec,n,x,w和bs。我不应该阅读代码来弄清楚。 :) – 2011-03-27 00:58:18