Tkinter课让我感到困惑(基本)(Tkinter classes are confusing me (basic ))

编程入门 行业动态 更新时间:2024-10-27 00:29:18
Tkinter课让我感到困惑(基本)(Tkinter classes are confusing me (basic ))

我是python和编程的新手,我一直在尝试使用Tkinter制作一个简单的GUI程序,但它没有运行,我不明白我得到的错误?

错误是:GUI实例没有属性'frame'

未定义全局名称“框架”。

我的代码,我删除了一些不必要的东西。

class GUI: def __init__(self,master): frame=Frame(master) frame.pack() self.master=master now=datetime.datetime.now() self.date=str(now.month)+':'+str(now.day)+':'+str(now.year) self.time1=str(now.hour)+':'+str(now.minute)+':'+str(now.second) temp=14 humidity=15 self.userinput=StringVar() self.password=StringVar() #self.geometry('250x250+200+200') #self.title('Controller GUI') date_label=Label(frame,text='Date : %s' %self.date) time_label=Label(frame,text='Time: %s' %self.time1) temp_label=Label(frame,text='Temperature: %d C'%temp) hum_label=Label(frame,text='Humidity: %d%%'%humidity) EnterMail=Label(frame,text='Enter Gmail username:') EnterPass=Label(frame,text='Enter password:') self.mail_box=Entry(frame,textvariable=self.userinput) self.pass_box=Entry(frame,textvariable=self.password) self.EnterButton=Button(frame,text='Enter',command=self.printer) self.StartAlarm=Button(frame,text='Start Alarm',command=self.startalarm) self.StopAlarm=Button(frame,text='Stop Alarm',command=self.stopalarm) date_label.grid(row=0,column=0,sticky=W) time_label.grid(row=0,column=2,sticky=E) temp_label.grid(row=1,column=0,sticky=W) hum_label.grid(row=1,column=2,sticky=E) EnterMail.grid(row=4,column=0,sticky=W) EnterPass.grid(row=5,column=0,sticky=W) self.mail_box.grid(row=4,column=2) self.pass_box.grid(row=5,column=2) self.EnterButton.grid(row=7,column=0) self.StartAlarm.grid(row=8,column=0) self.StopAlarm.grid(row=10,column=0) mainloop() def startalarm(self): alarmlabel=Label(self.frame,text='Alarm Activated') alarmlabel.grid(row=11,column=0) GPIO.output(18,GPIO.HIGH) return def stopalarm(self): alarmlabel=Label(frame,text='Alarm Deactivated') alarmlabel.grid(row=11,column=0) GPIO.output(18,GPIO.LOW) return def printer(self): # prints user input self.username=self.userinput.get() self.MailPass=self.password.get() print username print MailPass mail = int(feedparser.parse("https://" + self.username + ":" + self.MailPass +"@mail.google.com/gmail/feed/atom")["feed"]["fullcount"]) mail_label=Label(frame,text='Email: %d unread emails' %self.mail) mail_label.grid(row=2,column=0,sticky=W) return root=Tk() app=GUI(master=root)

该网站搞砸了一些缩进。

I am new to python and programming in general and I have been trying to make a simple GUI program using Tkinter but it does not run and I don't understand the errors I get?

the Errors are: GUI instance has no attribute 'frame'

Global name 'frame' is not defined.

MY code, I have removed some unncessary stuff.

class GUI: def __init__(self,master): frame=Frame(master) frame.pack() self.master=master now=datetime.datetime.now() self.date=str(now.month)+':'+str(now.day)+':'+str(now.year) self.time1=str(now.hour)+':'+str(now.minute)+':'+str(now.second) temp=14 humidity=15 self.userinput=StringVar() self.password=StringVar() #self.geometry('250x250+200+200') #self.title('Controller GUI') date_label=Label(frame,text='Date : %s' %self.date) time_label=Label(frame,text='Time: %s' %self.time1) temp_label=Label(frame,text='Temperature: %d C'%temp) hum_label=Label(frame,text='Humidity: %d%%'%humidity) EnterMail=Label(frame,text='Enter Gmail username:') EnterPass=Label(frame,text='Enter password:') self.mail_box=Entry(frame,textvariable=self.userinput) self.pass_box=Entry(frame,textvariable=self.password) self.EnterButton=Button(frame,text='Enter',command=self.printer) self.StartAlarm=Button(frame,text='Start Alarm',command=self.startalarm) self.StopAlarm=Button(frame,text='Stop Alarm',command=self.stopalarm) date_label.grid(row=0,column=0,sticky=W) time_label.grid(row=0,column=2,sticky=E) temp_label.grid(row=1,column=0,sticky=W) hum_label.grid(row=1,column=2,sticky=E) EnterMail.grid(row=4,column=0,sticky=W) EnterPass.grid(row=5,column=0,sticky=W) self.mail_box.grid(row=4,column=2) self.pass_box.grid(row=5,column=2) self.EnterButton.grid(row=7,column=0) self.StartAlarm.grid(row=8,column=0) self.StopAlarm.grid(row=10,column=0) mainloop() def startalarm(self): alarmlabel=Label(self.frame,text='Alarm Activated') alarmlabel.grid(row=11,column=0) GPIO.output(18,GPIO.HIGH) return def stopalarm(self): alarmlabel=Label(frame,text='Alarm Deactivated') alarmlabel.grid(row=11,column=0) GPIO.output(18,GPIO.LOW) return def printer(self): # prints user input self.username=self.userinput.get() self.MailPass=self.password.get() print username print MailPass mail = int(feedparser.parse("https://" + self.username + ":" + self.MailPass +"@mail.google.com/gmail/feed/atom")["feed"]["fullcount"]) mail_label=Label(frame,text='Email: %d unread emails' %self.mail) mail_label.grid(row=2,column=0,sticky=W) return root=Tk() app=GUI(master=root)

the website messed up some of the indentation.

最满意答案

将函数中的每一frame更改为self.frame 。 它应该解决问题。 这使它成为一个实例变量。

当您在__init__定义frame时,您只是在该函数的范围内定义它,因此不能在其他函数的范围内使用它。

如果将它作为实例变量self.frame ,则所有函数都将具有相同的变量,从self参数传递。 问题解决了!

Change every single frame in your functions to self.frame. It should fix the problem. This makes it an instance variable.

When you defined frame in __init__, you're only defining it on the scope of that function, and thus can't be used in the others.

If you refer it as an instance variable, self.frame, all of your functions will have the same variable, passed from the self argument. Problem Solved!

更多推荐

本文发布于:2023-08-07 03:32:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1460836.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:让我   困惑   Tkinter   basic   confusing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!