Python中基于GUI的冒险游戏 - 未定义播放器名称

时间:2018-06-14 06:50:36

标签: python tkinter

我一直是这个网站的长期潜伏者,但从未问过任何问题,主要是从其他问题的问题得到我的答案,但我似乎无法找到解决这个问题的方法。作为Python的新手,我的代码可能效率提高十倍,而且更好,但它适用于我正在做的事情。

基本上,我正在尝试将数据从Tkinter条目提取到变量中以便稍后使用 - 我目前正在尝试将其打印到shell以进行测试 - 但是,每当我尝试将变量打印到shell时,它说“ pname未定义“ - pname是变量的名称。

代码:

# Imports necesary modules
import sys, os, time
import winsound as ws
import tkinter as tk

# Creates window
gui = tk.Tk()
gui.title('Tiemer Niptus')
gui.geometry('1920x1080')
gui.configure(bg='#572f87')
#gui.wm_iconbitmap('resources\images\icon.ico')

# Defines prerequisite functions
def gt_play():
    ws.PlaySound('resources\sound\gt.wav', ws.SND_FILENAME|ws.SND_LOOP|ws.SND_ASYNC)

def win_play():
    ws.PlaySound('resources\sound\win.wav', ws.SND_FILENAME|ws.SND_LOOP|ws.SND_ASYNC)

def dth_play():
    ws.PlaySound('resources\sound\dth.wav', ws.SND_FILENAME|ws.SND_LOOP|ws.SND_ASYNC)

def snd_stop():
    ws.PlaySound(None, ws.SND_FILENAME|ws.SND_PURGE)

def death():
    dth_play()
    gui.configure(bg='#000000')

    dth_lbl = tk.Label(text='YOU HAVE DIED', font = ['Helvetica', 60], bg='#000000', fg='#a50b29')
    dth_lbl.pack()
    dth_lbl.place(x=950, y=370, anchor="center")

    dth_btn = tk.Button(text='TRY AGAIN?', font = ['Helvetica', 60], bg='#a50b29', fg='#000000',
                        command = lambda:[dth_lbl.destroy(), dth_btn.destroy(), snd_stop(), str_screen()])
    dth_btn.pack()
    dth_btn.place(x=950, y=500, anchor="center")

def win():
    win_play()
    gui.configure(bg='#1dcc0d')

    win_lbl = tk.Label(text='YOU HAVE WON!', font = ['Helvetica', 60], bg='#1dcc0d', fg='#ffd700')
    win_lbl.pack()
    win_lbl.place(x=950, y=370, anchor="center")

    win_btn = tk.Button(text='PLAY AGAIN?', font = ['Helvetica', 60], bg='#1dcc0d', fg='#ffd700',
                        command = lambda:[win_lbl.destroy(), win_btn.destroy(), snd_stop(), str_screen()])
    win_btn.pack()
    win_btn.place(x=950, y=500, anchor="center")

# Defines stage functions
def str_screen():
    gt_play()
    gui.configure(bg='#572f87')

    str_lbl = tk.Label(text='TIEMER NIPTUS', font = ['Helvetica', 60], fg='#00ffab', bg='#572f87')
    str_lbl.pack()
    str_lbl.place(x=950, y=350, anchor="center")

    str_btn = tk.Button(text='START', font = ['Helvetica', 50], bg='#7d0234', fg='#00ffab', width = 15,
                        command = lambda:[str_lbl.destroy(), str_btn.destroy(), name_select()])
    str_btn.pack()
    str_btn.place(x=950, y=475, anchor="center")

def name_select():
    pname_lbl = tk.Label(text='INPUT NAME', fg='#00ffab', font = ['Helvetica', 50], bg='#572f87')
    pname_lbl.pack()
    pname_lbl.place(x=950, y=340, anchor="center")

    pname_ent = tk.Entry(bg='#00ffab', fg='#7d0234', font = ['Helvetica', 40], width = 14)
    pname_ent.pack()
    pname_ent.place(x=950, y=415, anchor="center")
    pname = pname_ent.get()

    go_btn = tk.Button(text='GO', font = ['Helvetica', 25], bg='#7d0234', fg='#00ffab', width = 21,
                       command = lambda:[snd_stop(), pname_lbl.destroy(), pname_ent.destroy(), go_btn.destroy(), street()])
    go_btn.pack()
    go_btn.place(x=950, y=490, anchor='center')

def street():
    print(pname)

# Draws window and starts game
str_screen()
gui.mainloop()

错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\lucas\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1550, in __call__
    return self.func(*args)
  File "C:\Users\lucas\Desktop\Program\TiemerNiptus.py", line 77, in <lambda>
    command = lambda:[snd_stop(), pname_lbl.destroy(), pname_ent.destroy(), go_btn.destroy(), street()])
  File "C:\Users\lucas\Desktop\Program\TiemerNiptus.py", line 82, in street
    print(pname)
NameError: name 'pname' is not defined

提前感谢您的帮助!

  

TJF

1 个答案:

答案 0 :(得分:1)

来自我的评论:

  

作用域错误 - def street()中的变量未知。您需要将其作为变量传递,将其作为类变量提供(对于您在函数范围内知道的实例)或将其声明为全局。

如果您想了解课程,请查看文档:{​​{3}}

有关基本方法,请参阅代码中的注释:

OnAuthorization