我一直是这个网站的长期潜伏者,但从未问过任何问题,主要是从其他问题的问题得到我的答案,但我似乎无法找到解决这个问题的方法。作为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
答案 0 :(得分:1)
来自我的评论:
作用域错误 - def street()中的变量未知。您需要将其作为变量传递,将其作为类变量提供(对于您在函数范围内知道的实例)或将其声明为全局。
如果您想了解课程,请查看文档:{{3}}
有关基本方法,请参阅代码中的注释:
OnAuthorization