我目前正在编写回文检测器的GUI,但我遇到了一些问题。我可以启动程序,GUI看起来很好。除了必要的按钮外,所有按钮都有效:Testa Palindrom(转换为Test Palindrome)。
每当我点击该按钮时,我都会收到一个NameError:未定义全局名称'palindromentry'。
下面你会看到整个代码,但首先要快速解释它的作用。
def ordnaText降低文本并修复它以进行检查。 def testap使用for-loop测试它是否是回文。 def visaResultat显示结果(可以在label1.config中看到)。
我的问题是:为什么我收到此错误?我无法理解我的生活。
import tkinter
import tkinter.messagebox
def main():
gui()
tkinter.mainloop()
def gui():
main_window = tkinter.Tk()
top_frame = tkinter.Frame()
mid_frame = tkinter.Frame()
bottom_frame = tkinter.Frame()
main_window.title("Palindromdetektor")
main_window.geometry("400x400")
label1 = tkinter.Label(top_frame, text = "Skriv in ett palindrom nedan för att testa det!",
bg = "green", width = 60, height = 6)
button1 = tkinter.Button(mid_frame, text = "Testa palindrom", height = 3, width = 22,
bg = "Purple", command = mainaction)
button2 = tkinter.Button(bottom_frame, text= "Instruktioner", height = 3, width = 22,
bg = "Purple", command = messagebox)
button3 = tkinter.Button(bottom_frame, text ="Spara palindrom", height = 3, width = 22,
bg = "Purple") #command = sparapalindrom)
button4 = tkinter.Button(bottom_frame, text ="Avsluta programmet", height = 3, width = 22,
bg = "Purple", command=main_window.destroy)
palindromentry = tkinter.Entry(mid_frame, width = 67)
palindromentry.pack()
top_frame.pack()
mid_frame.pack()
bottom_frame.pack()
label1.pack()
button1.pack()
button2.pack()
button3.pack()
button4.pack()
def ordnaText(text):
nytext = ("")
fixadText = text.lower()
for i in fixadText:
if i.isalnum():
nytext = (nytext + i)
return nytext
def testap(nytext):
palindrom = True
for i in range (0, len(nytext)):
if (nytext[i]) != (nytext[len(nytext)-i-1]):
palindrom = False
return palindrom
def visaResultat(palindrom):
if palindrom:
label1.config(text="Ja, detta är ett palindrom!", bg="green")
else:
label1.config(text="Nej, detta är inte ett palindrom!", bg="red")
def messagebox():
tkinter.messagebox.showinfo("Hjälp", "Detta är ett program som testar vare sig en text är ett palindrom eller inte.\n \
Skriv in din text i rutan och tryck på Testa Palindrom-knappen så får du se ditt resultat högst upp.\n \
Om du vill avsluta programmet klickar du på knappen som heter Avsluta programmet.\n \
Detta program är kodat av Olof Unge som nås via mail: olofunge@hotmail.com.\n \
Tack för att du använder detta program!")
#def sparapalindrom():
# try:
# if palindrom:
# myfile = open("palindrom.txt", "a")
# myfile.write(text\n)
# myfile.close()
# else:
# label1.config(text="Du kan bara spara godkända palindrom.")
# except IOError:
# label1.config(text="Kunde inte hitta / skapa filen.")
def mainaction():
global text
text = palindromentry.get()
ordnaText(text)
testap(ordnaText(text))
visaResultat(testap(ordnaText(text)))
main()
如果你能坚持主题而不评论任何其他内容,我会非常感激,因为其他一切都很好。非常感谢你!
最好的问候。
这是用PYTHON 3.0编写的
答案 0 :(得分:1)
palindromentry
在gui
函数中定义。因此,它的范围仅限于该单一功能。单击该按钮时,将调用mainaction
函数,但它不知道gui
函数的作用域。
这里有几个选项(按照我的喜好排列):
mainaction
的定义移到gui
函数中(需要在执行操作的按钮之前定义...)。global
gui
醇>