Python 3.x 属性错误:';主屏幕';对象没有属性';属性';

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

你能给我一个解决办法吗?我自己解决不了这个问题

我得到一个AttributeError:“mainscreen”对象没有属性“attributes” 当我按下按钮切换到全屏时。 谢谢你的帮助

#!/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,我认为这是程序员最好的网站,我走了那么远:-)通过搜索已经在这里找到了答案。。。