Python 2.7 在Python中运行GUI代码时发生属性错误。Python没有提供关于错误是什么或是什么导致错误的信息

Python 2.7 在Python中运行GUI代码时发生属性错误。Python没有提供关于错误是什么或是什么导致错误的信息,python-2.7,tkinter,Python 2.7,Tkinter,这是我的代码,当我尝试运行它并通过在输入字段中输入数字来使用它时,当我尝试调用输入变量时会发生属性错误。这是显示的消息: Tkinter回调中的异常 回溯(最近一次呼叫最后一次): 文件“C:\Python27\lib\lib tk\Tkinter.py”,第1486行,在调用中 返回self.func(*args) OnGenButtonClick中的文件“F:\Homebook\Yr13\Extended Project\Notepad++\Python27\Programs\GUI{c}菜

这是我的代码,当我尝试运行它并通过在输入字段中输入数字来使用它时,当我尝试调用输入变量时会发生属性错误。这是显示的消息:

Tkinter回调中的异常 回溯(最近一次呼叫最后一次): 文件“C:\Python27\lib\lib tk\Tkinter.py”,第1486行,在调用中 返回self.func(*args) OnGenButtonClick中的文件“F:\Homebook\Yr13\Extended Project\Notepad++\Python27\Programs\GUI{c}菜单+检查+gen+Nth.py”,第224行 n=str(Prime_Generation(Prime_Gen.entryVariable5.get(),Prime_Gen.entryVariable6.get()) 文件“C:\Python27\lib\lib tk\Tkinter.py”,第1845行,位于getattr 返回getattr(self.tk,attr) AttributeError:entryVariable5

任何帮助都将不胜感激。 我已经在这个问题上坚持了三天,并尝试使用不同的函数和名称来解决这个问题,但错误仍然存在

import Tkinter             
from Tkinter import *
import math                


def SoS(limit):

    numbers = range(3, limit+1, 2)
    half = (limit)//2
    initial = 4

    for step in xrange(3, limit+1, 2):

        for i in xrange(initial, half, step):
           numbers[i-1] = 0
        initial += 2*(step+1)

        if initial > half:
            plist = [2] + filter(None, numbers)
            return plist         

            break


def S(m):

    sieve = [True] * m

    for i in xrange(3,(int(m**0.5)+1),2):
        if sieve[i]:
            sieve[i*i::2*i]=[False]*((m-i*i-1)/(2*i)+1)

    plist = [2] + [i for i in xrange(3,m,2) if sieve[i]]
    return plist


def OTS(n):

    n, correction = n-n%6+6, 2-(n%6>1)
    sieve = [True] * (n/3)

    for i in xrange(1,(int(n**0.5)/3)+1):
      if sieve[i]:
        k=3*i+1|1
        sieve[      k*k/3      ::2*k] = [False] * ((n/6-k*k/6-1)/k+1)
        sieve[k*(k-2*(i&1)+4)/3::2*k] = [False] * ((n/6-k*(k-2*(i&1)+4)/6-1)/k+1)

    plist = [2,3] + [3*i+1|1 for i in xrange(1,n/3-correction) if sieve[i]]
    return plist


def is_prime(num):

    if num <= 3:
        if num <= 1:
            return False
        return True

    if not num % 2 or not num % 3:
        return False

    for i in xrange(5, int(num ** 0.5) + 1, 6):   
        if not num % i or not num % (i + 2):
            return False

    return True


def is_prime_multiple(Lower,Upper):
    NumberList = dict()

    if Lower%2 == 1:
        for i in xrange(Lower, Upper,2):
            NumberList[i] = is_prime(i)
    else:
       for i in xrange(Lower-1,Upper,2):
            NumberList[i] = is_prime(i)

    NumberList[1] = False

    return [i for i in NumberList if NumberList[i] == True]


def Prime_Generation(L,U):                                                          
    Lower = int(L)
    Upper = int(U)                                                         

    if Lower == 1:
        if Upper < 92:
            print SoS(Upper)

        if Upper >= 92 and Upper < 2250:
            print S(Upper)

        if Upper >= 2250 :
            print OTS(Upper)
    else:
        print sorted(is_prime_multiple(Lower,Upper))


def factors(n):

    f = 3
    fs = []

    while n % 2 == 0:
        fs.append(2)
        n /= 2

    while f*f <= n:
        while n % f == 0:
            fs.append(f)
            n /= f
        f += 2

    if n > 1:
        fs.append(n)

    return fs 


def Prime_Checker(N):                                                          
    NStr = str(N)
    N = int(N)                                                              
    Nfs = factors(N)
    for i in Nfs:
        if i != N:
            NfsStr = str(Nfs).strip('[]')
            resultb = [NStr,' is not a prime. The prime factors of ',NStr,' are ',NfsStr]
            return resultb.join()

        else:
            return N,' is a prime. The prime factors of ',N ,' are ',N


def PrimeFinderLamda(n,limit):                                
    nums = range(3,limit,2)
    for i in range(2, int(limit**0.5)):
        nums = filter(lambda x: x == i or x % i, nums)
    return [2]+nums


def NthPrime(N):
    N = int(N)
    Lower = 1
    limit = N*N
    if N == 1:
        return 2
    else:
        return PrimeFinderLamda(N,limit)[N-1]




class Prime_app_tk(Tkinter.Tk):            
    def __init__(self,parent):
        Tk.__init__(self,parent)
        self.parent = parent     

        self.initialize()

def Prime_Gen_Win(self):
    Prime_Gen = Toplevel()

    Prime_Gen.grid()

    Prime_Gen.labelVariable3 = StringVar()                                          
    Title_label2 = Label(Prime_Gen,textvariable=Prime_Gen.labelVariable3,
                        relief = RAISED,fg="black",bg="white"
                        ,font = "Arial")                                          

    Title_label2.grid(column=0,row=0,columnspan=4)
    Prime_Gen.labelVariable3.set(u"Please enter the upper and lower limits of the prime number generation")

    Prime_Gen.labelVariable4 = StringVar()                           
    SubTitle_label1 = Label(Prime_Gen,textvariable=Prime_Gen.labelVariable4,fg="black",bg="white")                        
    SubTitle_label1.grid(column=0,row=1,columnspan=4)
    Prime_Gen.labelVariable4.set(u"(Please enter values no greater than 10 million)")

    Prime_Gen.entryVariable5 = StringVar()                                               
    Prime_Gen.entry = Entry(Prime_Gen,textvariable=Prime_Gen.entryVariable5)
    Prime_Gen.entry.grid(column=0,row=4)
    Prime_Gen.entryVariable5.set(u"Lower.")

    Prime_Gen.entryVariable6 = StringVar()                                               
    Prime_Gen.entry = Entry(Prime_Gen,textvariable=Prime_Gen.entryVariable6)
    Prime_Gen.entry.grid(column=0,row=5)
    Prime_Gen.entryVariable6.set(u"Upper.")

    Genbutton = Button(Prime_Gen,text=u"Generate !",command=self.OnGenButtonClick   #placing and aesthetics of button
                       ,bg="yellow",relief=RAISED,padx=10,pady=10
                       ,activebackground="red",activeforeground="white")                  
    Genbutton.grid(column=0,row=6)

    scrollbar = Scrollbar(Prime_Gen)
    scrollbar.grid(column=1,row=8,sticky="ns")        

    Prime_Gen.Result_label = Text(Prime_Gen, yscrollcommand=scrollbar.set 
                         ,fg="blue",bg="white",wrap=WORD
                         ,width=100,relief = SUNKEN) 

    Prime_Gen.Result_label.grid(column=0,row=8,columnspan=2)

    scrollbar.config(command=Prime_Gen.Result_label.yview)

    Prime_Gen.labelVariable = StringVar()                           
    SubTitle_label = Label(Prime_Gen,textvariable=Prime_Gen.labelVariable,fg="black",bg="white")                        
    SubTitle_label.grid(column=0,row=9,columnspan=4)
    Prime_Gen.labelVariable.set(u"To see full list please click on the results\n and use the up and down arrows to scroll through the list")



    Prime_Gen.grid_columnconfigure(0,weight=1)        
    Prime_Gen.resizable(True,True)
    Prime_Gen.update()
    Prime_Gen.geometry(Prime_Gen.geometry())       
    Prime_Gen.entry.focus_set()
    Prime_Gen.entry.selection_range(0, Tkinter.END)

def OnGenButtonClick(Prime_Gen):
    n= str(Prime_Generation(Prime_Gen.entryVariable5.get(),Prime_Gen.entryVariable6.get()))
    Prime_Gen.Result_label.insert(END,"\nPrimes Found\n")
    Prime_Gen.Result_label.insert(END,n)
    Prime_Gen.entry.focus_set()
    Prime_Gen.entry.selection_range(0, Tkinter.END)

def Prime_Check_Win(self):
    Prime_Check = Toplevel()


    Prime_Check.grid()

    Prime_Check.labelVariable8 = StringVar()                                               
    Title_label3 = Label(Prime_Check,textvariable=Prime_Check.labelVariable8,
                        relief = RAISED,fg="black",bg="white"
                        ,font = "Arial")                                                

    Title_label3.grid(column=0,row=0,columnspan=4)
    Prime_Check.labelVariable8.set(u"Please enter a Number to be checked for primality")

    Prime_Check.labelVariable9 = StringVar()                           
    SubTitle_label3 = Label(Prime_Check,textvariable=Prime_Check.labelVariable9,fg="black",bg="white")                        
    SubTitle_label3.grid(column=0,row=1,columnspan=4)
    Prime_Check.labelVariable9.set(u"(Please enter values no greater than 10 million)")

    Prime_Check.entryVariable = StringVar()                                                               
    Prime_Check.entry = Entry(Prime_Check,textvariable=Prime_Check.entryVariable)
    Prime_Check.entry.grid(column=0,row=2)
    Prime_Check.entryVariable.set(u"Enter Number here.")

    Checkbutton = Button(Prime_Check,text=u"Check !",command=self.OnCheckButtonClick  
                       ,bg="blue",fg="white",relief=RAISED,padx=10,pady=10
                       ,activebackground="red",activeforeground="white")                        
    Checkbutton.grid(column=0,row=4)

    Prime_Check.labelVariable10 = StringVar()
    Result_label2 = Message(Prime_Check,textvariable=Prime_Check.labelVariable10           
                         ,anchor="w",fg="blue",bg="white"
                         ,width=500,relief = SUNKEN,padx=3,pady=3)                    
    Result_label2.grid(column=0,row=5,columnspan=2,rowspan=100)
    Prime_Check.labelVariable10.set(u"Hello")



    Prime_Check.grid_columnconfigure(0,weight=1)        
    Prime_Check.resizable(True,False)
    Prime_Check.update()
    Prime_Check.geometry(Prime_Check.geometry())       
    Prime_Check.entry.focus_set()
    Prime_Check.entry.selection_range(0, Tkinter.END)

def OnCheckButtonClick(Prime_Check):
    Prime_Check.labelVariable10.set(Prime_Checker(Prime_Check.entryVariable.get()))         #Had to call on prime gen and display results
    Prime_Check.entry.focus_set()
    Prime_Check.entry.selection_range(0, Tkinter.END)

def Nth_Prime_Win(self):                      
    Nth_Prime = Toplevel()

    Nth_Prime.grid()

    Nth_Prime.labelVariable12 = StringVar()                           
    Title_label = Label(Nth_Prime,textvariable=Nth_Prime.labelVariable12,
                        relief = RAISED,fg="black",bg="white"
                        ,font = "Arial")                        

    Title_label.grid(column=0,row=0,columnspan=4)
    Nth_Prime.labelVariable12.set(u"Please enter the Nth prime you would like to find")

    Nth_Prime.labelVariable13 = StringVar()                           
    SubTitle_label = Label(Nth_Prime,textvariable=Nth_Prime.labelVariable13,fg="black",bg="white")                        
    SubTitle_label.grid(column=0,row=1,columnspan=4)
    Nth_Prime.labelVariable13.set(u"(Please enter values no greater than 664579")

    Nth_Prime.entryVariable = StringVar()                            
    Nth_Prime.entry = Entry(Nth_Prime,textvariable=Nth_Prime.entryVariable)
    Nth_Prime.entry.grid(column=0,row=4)
    Nth_Prime.entryVariable.set(u"Enter Number here.")

    Genbutton = Button(Nth_Prime,text=u"Generate !",command=self.OnButtonNthClick  
                       ,bg="green",relief=RAISED,padx=10,pady=10
                       ,activebackground="red",activeforeground="white")   
    Genbutton.grid(column=0,row=5)

    Nth_Prime.labelVariable14 = StringVar()
    Result_label = Message(Nth_Prime,textvariable=Nth_Prime.labelVariable14           
                         ,anchor="w",fg="blue",bg="white"
                         ,width=1000,relief = SUNKEN,justify=LEFT,padx=3,pady=3)    

    Result_label.grid(column=0,row=6,columnspan=2,rowspan=100)
    Nth_Prime.labelVariable14.set(u"Hello")



    Nth_Prime.grid_columnconfigure(0,weight=1)        
    Nth_Prime.resizable(False,False)                    
    Nth_Prime.update()
    Nth_Prime.geometry(Nth_Prime.geometry())       
    Nth_Prime.entry.focus_set()
    Nth_Prime.entry.selection_range(0, Tkinter.END)

def OnButtonNthClick(Nth_Prime):
    Nth_Prime.labelVariable14.set(NthPrime(Nth_Prime.entryVariable.get()))         
    Nth_Prime.entry.focus_set()
    Nth_Prime.entry.selection_range(0, Tkinter.END)


def initialize(self):                      
    self.grid()

    self.labelVariable1 = StringVar()                           
    Title_label1 = Label(self,textvariable=self.labelVariable1,
                        relief = RAISED,fg="black",bg="white"
                        ,font = "Arial")                        

    Title_label1.grid(column=0,row=0,columnspan=4)
    self.labelVariable1.set(u"Welcome to the Prime Program")

    self.labelVariable2 = StringVar()                           
    SubTitle_label = Label(self,textvariable=self.labelVariable2,fg="black",bg="white")                        
    SubTitle_label.grid(column=0,row=1,columnspan=4)
    self.labelVariable2.set(u"(Please select the function you would like to use)")


    PrimeGenbutton = Button(self,text=u"Find Primes between 2 limits !",command=self.Prime_Gen_Win         
                       ,bg="yellow",relief=RAISED,padx=10,pady=10
                       ,activebackground="red",activeforeground="white")                                          
    PrimeGenbutton.grid(column=0,row=3)

    PrimeCheckbutton = Button(self,text=u"Check if a number is prime !",command=self.Prime_Check_Win  
                       ,bg="blue",fg="white",relief=RAISED,padx=14,pady=10
                       ,activebackground="red",activeforeground="white")   
    PrimeCheckbutton.grid(column=0,row=4)

    NthPrimebutton = Button(self,text=u"Find the Nth prime !",command=self.Nth_Prime_Win  
                       ,bg="green",relief=RAISED,padx=35,pady=10
                       ,activebackground="red",activeforeground="white")   
    NthPrimebutton.grid(column=0,row=5)      


    self.grid_columnconfigure(0,weight=1)        
    self.resizable(False,False)
    self.update()
    self.geometry(self.geometry())       




if __name__ == "__main__":
    app = Prime_app_tk(None)
    app.title('Prime Program')
    app.mainloop()
导入Tkinter
从Tkinter进口*
输入数学
def SoS(限制):
数字=范围(3,极限+1,2)
half=(限制)//2
初始值=4
对于X范围内的步长(3,极限+1,2):
对于X范围内的i(初始、一半、阶跃):
数字[i-1]=0
初始+=2*(步骤+1)
如果初始值>一半:
plist=[2]+过滤器(无,数字)
返回层
打破
def S(m):
筛子=[True]*m
对于x范围内的i(3,(int(m**0.5)+1),2):
如果[i]:
筛[i*i::2*i]=[False]*((m-i*i-1)/(2*i)+1)
plist=[2]+[i代表x范围内的i(3,m,2),如果筛[i]]
返回层
def OTS(n):
n、 校正=n-n%6+6,2-(n%6>1)
筛子=[正确]*(n/3)
对于x范围内的i(1,(int(n**0.5)/3)+1):
如果[i]:
k=3*i+1 | 1
筛[k*k/3::2*k]=[False]*((n/6-k*k/6-1)/k+1)
筛子[k*(k-2*(i&1)+4)/3::2*k]=[False]*((n/6-k*(k-2*(i&1)+4)/6-1)/k+1)
plist=[2,3]+[3*i+1 | 1,如果筛[i]]
返回层
def是_prime(num):
如果num=2250:
打印OTS(上)
其他:
打印排序(是素数的倍数(下、上))
def系数(n):
f=3
fs=[]
当n%2==0时:
财政司司长(二)
n/=2
而f*f 1:
fs.append(n)
返回fs
def Prime_检测器(N):
NStr=str(N)
N=int(N)
Nfs=系数(N)
对于Nfs中的i:
如果我N:
NfsStr=str(Nfs).strip(“[]”)
resultb=[NStr'不是素数,'NStr'的素数因子是,'NfsStr]
返回resultb.join()
其他:
返回N,'是一个素数。'N'的素因子是',N
def PrimeFinderLamda(n,极限):
nums=范围(3,极限,2)
对于范围内的i(2,int(极限**0.5)):
nums=过滤器(λx:x==i或x%i,nums)
返回[2]+nums
def NthPrime(N):
N=int(N)
下限=1
极限=N*N
如果N==1:
返回2
其他:
返回PrimeFinderLamda(N,限制)[N-1]
类素数(Tkinter.tk):
定义初始化(自身,父级):
Tk.\uuuuuuuuuuuuuuuuuuuuu初始(自我,父)
self.parent=parent
self.initialize()
def Prime_Gen__Win(自我):
Prime_Gen=顶级()
基本网格()
Prime_Gen.labelVariable3=StringVar()
Title_label2=标签(Prime_Gen,textvariable=Prime_Gen.labelVariable3,
浮雕=凸起,fg=“黑色”,bg=“白色”
,font=“Arial”)
Title_label2.grid(列=0,行=0,列span=4)
素数\u Gen.labelVariable3.set(u“请输入素数生成的上限和下限”)
Prime_Gen.labelVariable4=StringVar()
SubTitle_label1=标签(Prime_Gen,textvariable=Prime_Gen.labelVariable4,fg=“黑色”,bg=“白色”)
副标题_label1.网格(列=0,行=1,列span=4)
Prime_Gen.labelVariable4.set(u)(请输入不大于1000万的值)
Prime_Gen.entryVariable5=StringVar()
Prime\u Gen.entry=entry(Prime\u Gen,textvariable=Prime\u Gen.entryVariable5)
Prime_Gen.entry.grid(列=0,行=4)
Prime_Gen.entryVariable5.set(u“Lower.”)
Prime_Gen.entryVariable6=StringVar()
Prime\u Gen.entry=entry(Prime\u Gen,textvariable=Prime\u Gen.entryVariable6)
Prime_Gen.entry.grid(列=0,行=5)
Prime_Gen.entryVariable6.set(u“Upper.”)
Genbutton=Button(Prime_Gen,text=u“Generate!”,command=self.OnGenButtonClick#按钮的放置和美学
,bg=“黄色”,浮雕=凸起,padx=10,pady=10
,activebackground=“红色”,activeforeground=“白色”)
Genbutton.grid(列=0,行=6)
滚动条=滚动条(基本生成)
scrollbar.grid(列=1,行=8,sticky=“ns”)
Prime\u Gen.Result\u label=Text(Prime\u Gen,yscrollcommand=scrollbar.set
,fg=“蓝色”,bg=“白色”,wrap=WORD
,宽度=100,浮雕=凹陷)
素数生成结果标签网格(列=0,行=8,列跨度=2)
scrollbar.config(命令=Prime\u Gen.Result\u label.yview)
Prime_Gen.labelVariable=StringVar()
SubTitle\u label=label(Prime\u Gen,textvariable=Prime\u Gen.labelVariable,fg=“黑色”,bg=“白色”)
SubTitle_label.grid(列=0,行=9,列span=4)
Prime\u Gen.labelVariable.set(u“要查看完整列表,请单击结果\n并使用上下箭头滚动列表”)
基本网格列配置(0,权重=1)
主生成可调整大小(真,真
Genbutton = Button(..., command=self.OnGenButtonClick, ...)