python - 获取 NameError 试图访问我的 tkinter stringvar
问题描述
我已经看到并尝试了Tkinter StringVar 错误中的答案,但它仍然没有解决任何问题,我正在制作基于文本的 rpg(我知道 python 并不是最好的游戏,而且它可能不方便)并且我正在尝试使 if 语句保持语法正确。这是到目前为止的代码
import tkinter as tk
import random
from tkinter import*
class Nirvana:
def __init__(self, master):
self.master = master
master.title("Nirvana")
happen = StringVar()
self.event = Message(master, textvariable= happen)
self.event.grid(row=0)
self.b1 = Button(master, text= "Continue", command= self.go)
self.b1.grid(row=1)
encounter = StringVar()
enc = encounter.get()
hap = happen.get()
def go(self):
encounter.set(random.choice(hostiles1 + hostiles2))
if (enc[0]) is "a" or "e" or "i" or "o" or "u":
happen.set("You have encountered an", enc)
else:
happen.set("You have encountered a", enc)
d = ("dragon")
w = ("wolf")
o = ("ogre")
hostiles1 = [d, w]
hostiles2 = [o]
root = Tk()
root.geometry("500x500")
my_gui = Nirvana(root)
root.mainloop()
这是错误
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1702, in __call__
return self.func(*args)
File "Tbr.py", line 22, in go
encounter.set(random.choice(hostiles1 + hostiles2))
NameError: name 'encounter' is not defined
解决方案
您需要将 StringVar 对象分配给属性:
import tkinter as tk
import random
class Nirvana:
def __init__(self, master, hostiles1, hostiles2):
self.master = master
self.hostiles1 = hostiles1
self.hostiles2 = hostiles2
master.title("Nirvana")
self.happen = tk.StringVar()
self.event = tk.Message(master, textvariable=self.happen)
self.event.grid(row=0)
self.b1 = tk.Button(master, text="Continue", command=self.go)
self.b1.grid(row=1)
self.encounter = tk.StringVar()
def go(self):
self.encounter.set(random.choice(self.hostiles1 + self.hostiles2))
enc = self.encounter.get()
a = "an" if enc[0] in ("a", "e", "i", "o", "u") else "an"
self.happen.set("You have encountered {} {}".format(a, enc))
def main():
d = "dragon"
w = "wolf"
o = "ogre"
hostiles1 = [d, w]
hostiles2 = [o]
root = tk.Tk()
root.geometry("500x500")
my_gui = Nirvana(root, hostiles1, hostiles2)
root.mainloop()
if __name__ == '__main__':
main()
推荐阅读
- javascript - 将 useEffect 函数转换为 componentDidMount
- redis - 是否可以使用 Geode Redis Adapter 实现速率限制?
- cmake - 能够使用 target_link_libraries 找到 Qt5 库,但不能使用 find_library。是什么赋予了?
- splunk - 基于日志文件内容的 Splunk Dashboard
- normalization - 如何标准化从 Apple Watch 加速度计获取的数据?
- powershell - 如何获取由另一个 Powershell 进程打开的 Powershell 进程?
- c# - C# ASP.NET 中的 SQL CASE 语句问题
- python - 如何在 python 终端中打开我的 .py 文件(菜鸟问)?
- firebase - Firebase 实时数据库。有没有办法设置记录创建的时间戳?
- php - Bootstrap .col 可在桌面上调整屏幕大小,但不能在移动设备上调整