Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter.entry和NameErrors。_Python - Fatal编程技术网

Python tkinter.entry和NameErrors。

Python tkinter.entry和NameErrors。,python,Python,我目前正在为回文检测器编写GUI,但遇到了一些问题。我可以启动程序,GUI看起来很好。除了必要的一个按钮:Testa回文(翻译为Test回文)外,所有按钮都可以工作 每当我点击那个按钮,我就会得到一个名称错误:没有定义全局名称“palindromentry” 在下面,您将看到完整的代码,但首先是对其功能的快速解释 def ordnaText降低文本并修复它以进行检查。 deftestap使用for循环测试它是否是回文。 def visaResultat显示结果(可在label1.config中查

我目前正在为回文检测器编写GUI,但遇到了一些问题。我可以启动程序,GUI看起来很好。除了必要的一个按钮:Testa回文(翻译为Test回文)外,所有按钮都可以工作

每当我点击那个按钮,我就会得到一个名称错误:没有定义全局名称“palindromentry”

在下面,您将看到完整的代码,但首先是对其功能的快速解释

def ordnaText降低文本并修复它以进行检查。 deftestap使用for循环测试它是否是回文。 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()
若你们能坚持主题,不发表任何评论,我将不胜感激,因为其他一切都很好。多谢各位

致以最良好的祝愿


这是用Python3.0编码的
回文
是在
gui
函数中定义的。因此,它的范围仅限于单个函数。单击按钮时,会调用
mainaction
函数,但它不知道
gui
函数的范围

这里有几个选项(按我的偏好排列):

  • 使所有这些东西成为一个类,这样您就可以在函数调用之间共享状态
  • mainaction
    的定义移动到
    gui
    功能中(需要在执行操作的按钮之前定义它…)
  • gui

  • 即使是在代码中,这也不是一个真正意义上的混血儿。使它更难阅读。只是说说而已你说得对。对不起因此,它应该在mainaction函数中定义?是否可以在没有类的情况下进行定义?非常感谢您的帮助@user1916173——请参见选项2和3;-)哦,我明白了!非常感谢,我要试试这个!Re:#2,如果在定义函数之前或之后声明
    palindromentry
    ,应该没有关系。只需在调用函数之前声明它。