如何重新启动脚本?

时间:2011-03-27 00:43:21

标签: python restart

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窗口中单击是时重启脚本?

1 个答案:

答案 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()

至于在函数之间传递变量,如果你没有多少时间,你可以坚持使用全局变量,但最好将所有结果函数放入一个类并使用实例变量。