Python 2.7 在Python中运行GUI代码时发生属性错误。Python没有提供关于错误是什么或是什么导致错误的信息
这是我的代码,当我尝试运行它并通过在输入字段中输入数字来使用它时,当我尝试调用输入变量时会发生属性错误。这是显示的消息: 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 任何帮助都将不胜感激。 我已经在这个问题上坚持了三天,并尝试使用不同的函数和名称来解决这个问题,但错误仍然存在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}菜
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, ...)