Python 3.x 属性错误:';主屏幕';对象没有属性';属性';
你能给我一个解决办法吗?我自己解决不了这个问题 我得到一个AttributeError:“mainscreen”对象没有属性“attributes” 当我按下按钮切换到全屏时。 谢谢你的帮助Python 3.x 属性错误:';主屏幕';对象没有属性';属性';,python-3.x,tkinter,Python 3.x,Tkinter,你能给我一个解决办法吗?我自己解决不了这个问题 我得到一个AttributeError:“mainscreen”对象没有属性“attributes” 当我按下按钮切换到全屏时。 谢谢你的帮助 #!/bin/python3 import tkinter import grovepi import math import time from tkinter import Tk, Label, Button class mainscreen: def __init__(self,maste
#!/bin/python3
import tkinter
import grovepi
import math
import time
from tkinter import Tk, Label, Button
class mainscreen:
def __init__(self,master):
self.master = master
master.title ("Temperature")
master.geometry("800x480")
master.attributes("-fullscreen", False)
self.state = False
sensorTH1 = 4
sensorTH2 = 3
temp1=0
temp2=0
#column0 and 1
self.labeltemp11 = tkinter.Label (master, text="Temp inside", fg="black", font="72")
self.labeltemp11.grid(row=1, column=0 ,sticky="sw")
self.labeltemp1 =tkinter.Label (master, text="", fg="black", font="72")
self.labeltemp1.grid(row=1, column=1,sticky="sw")
self.labelhum11 = tkinter.Label(master, text="Hum inside", fg="black", font="72")
self.labelhum11.grid(row=2,column=0,sticky="sw")
self.labelhum1 = tkinter.Label (master, text="",fg="black", font="72")
self.labelhum1.grid(row=2, column=1,sticky="sw")
self.labeltemp22 = tkinter.Label (master, text="Temp outside", fg="black",font="72")
self.labeltemp22.grid(row=3, column=0,sticky="sw")
self.labeltemp2 = tkinter.Label (master, text="", fg="black", font="72")
self.labeltemp2.grid(row=3, column=1,sticky="sw")
self.labelhum22 = tkinter.Label(master, text="Hum outside", fg="black", font="72")
self.labelhum22.grid(row=4,column=0,sticky="sw")
self.labelhum2 = tkinter.Label (master, text="", fg="black", font="72")
self.labelhum2.grid(row=4, column=1,sticky="sw")
#win.focus_set()
#win.bind("t",toggle_fullscreen(win))
self.button= tkinter.Button(master, text="No fullscreen", width=10,command=lambda:self.toggle_fullscreen())
#works as well button= tkinter.Button(win, text="No Fullscreen", width=10,command=toggle_fullscreen)
self.button.grid(column=0,row=5,sticky="nsew")
#column2 empty
self.labelemp1 = tkinter.Label (master, text="", fg="black", width="10" ,bg="white" , font="72")
self.labelemp1.grid(row=0, column=2,sticky="sw")
self.labelemp2 = tkinter.Label (master, text="test", fg="black", width="10",bg="black" , font="72")
self.labelemp2.grid(row=0, column=3,sticky="sw")
def READ(toggle):
if toggle:
[temp1,humidity1] = grovepi.dht(sensorTH1,1)
self.labeltemp1.configure(text= "{value:6.2f} C".format( value=temp1))
self.labelhum1.configure(text= "{value:6.2f} %".format( value=humidity1))
print ("temp1 =", temp1, " humidity1 =", humidity1) #py3
else:
#time.sleep(1)
[temp2,humidity2] = grovepi.dht(sensorTH2,1)
self.labeltemp2.configure(text= "{value:6.2f} C".format( value=temp2))
self.labelhum2.configure(text= "{value:6.2f} %".format( value=humidity2))
print ("temp2 =", temp2, " humidity2 =", humidity2) #py3
toggle= not toggle
#print (toggle)
return(toggle)
def read_every_second(self):
#global readoneortwo not needed after object oriented programming
#win.attributes("-fullscreen", False)
#toggle_fullscreen(win)
readoneortwo=self.READ(readoneortwo)
master.after(1000, read_every_second)
# can be used with call of button lamda: toggle_fullscreen (win) or any other window?
#def toggle_fullscreen(self, event=None):
# self.state = not self.state # Just toggling the boolean
# print ("test")
# self.attributes("-fullscreen", self.state)
# return "break"
def toggle_fullscreen(self, event=None):
self.state = not self.state # Just toggling the boolean
if self.state:
self.button["text"]="No Fullscreen"
else:
self.button["text"]="Fullscreen"
self.attributes("-fullscreen", master.state)
return "break"
if __name__ == '__main__':
root = tkinter.Tk()
win = mainscreen(root)
#win.read_every_second ()
root.mainloop()
如果我想运行win.read\u every\u second(),我会得到一个错误:
UnboundLocalError:赋值前引用了局部变量“readoneortwo”
我被告知要使用面向对象和类,所以我不需要全局变量,但似乎我需要???来解决这个问题更改
全屏切换,如下所示:
def toggle_fullscreen(self, event=None):
self.state = not self.state # Just toggling the boolean
if self.state:
self.button["text"]="No Fullscreen"
else:
self.button["text"]="Fullscreen"
self.master.attributes("-fullscreen", self.state)
return "break"
并注意更改为self.state
(来自master.state
)
您写道:我被告知要使用面向对象和类,所以我不需要全局变量,但似乎我需要???
使用类,您不需要全局变量,只要使用语法self.someVariable=someValue
。类的每个函数都将self
作为其第一个参数传递,使得类中定义的所有self.someVariable
变量都可以从函数中使用(就好像它们是“全局的”)
在顶部,你设置了master.attributes(“-fullscreen”,False)
,而在底部,你使用了self
:self.attributes(“-fullscreen”,master.state)
。坦白地说,我不理解我是新手……我认为self.master=master..Thx Claudio,我认为这是程序员最好的网站,我走了那么远:-)通过搜索已经在这里找到了答案。。。