Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Kivy屏幕小部件中初始化实例_Python_Kivy - Fatal编程技术网

Python 如何在Kivy屏幕小部件中初始化实例

Python 如何在Kivy屏幕小部件中初始化实例,python,kivy,Python,Kivy,我试图在我的kivy屏幕中访问名为self.localId的实例变量,它不断地说,在我初始化实例后,该实例不存在。我知道我的代码中有一个错误,但我很难识别它。在kivy屏幕中初始化实例有不同的方法吗?但这是我的密码。我将非常感谢任何帮助 mainfile.py from kivy.app import App import requests import json from kivy.uix.screenmanager import Screen, ScreenManager from kivy

我试图在我的kivy屏幕中访问名为self.localId的实例变量,它不断地说,在我初始化实例后,该实例不存在。我知道我的代码中有一个错误,但我很难识别它。在kivy屏幕中初始化实例有不同的方法吗?但这是我的密码。我将非常感谢任何帮助

mainfile.py

from kivy.app import App
import requests
import json
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.lang import Builder
from firebase import firebase



class LoginWindow(Screen):
   pass


class ProfileWindow(Screen):


   def __init__(self):
       self.localId = None






   def sign_in_existing_user(self, email, password):
       signin_url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=" + self.wak
       signin_payload = {"email": email, "password": password, "returnSecureToken": True}
       signin_request = requests.post(signin_url, data=signin_payload)
       sign_up_data = json.loads(signin_request.content.decode())
       app = App.get_running_app()
       print(signin_request.ok)
       print(signin_request.content.decode())

       if signin_request.ok == True:
           refresh_token = sign_up_data['refreshToken']

           self.localId = sign_up_data['localId']
           idToken = sign_up_data['idToken']
           # Save refreshToken to a file
           with open(app.refresh_token_file, "w") as f:
               f.write(refresh_token)

               print(sign_up_data['localId'])



           app.root.current = "page"

       elif signin_request.ok == False:
           error_data = json.loads(signin_request.content.decode())
           error_message = error_data["error"]['message']
           app.root.ids.login.ids.login_message.text = error_message.replace("_", " ")



   def print_localId(self):
       print(self.localId.text)


   def __init__(self, **kwargs):
       super(ProfileWindow, self).__init__(**kwargs)




window = ProfileWindow()




class MyApp(App):
   refresh_token_file = "refresh_token.txt"


   def build(self):
       self.page = ProfileWindow()
       self.refresh_token_file = self.user_data_dir + self.refresh_token_file

       return sm


class WindowManager(ScreenManager):
   pass


sm = Builder.load_file("kivy.kv")

#sm = WindowManager() 

if __name__ == '__main__':
   MyApp().run()
千伏

WindowManager:
   id: window manager
   LoginWindow:
       id: login
       name: "login"
   ProfileWindow:
       id: page
       name: "page"



<LoginWindow>

   canvas.before:
       Color:
           rgba: 1, 1, 1, 1
       Rectangle:
           pos: self.pos
           size: self.size


   TextInput:
       id: email
       hint_text: "Email"
       multiline: False
       pos_hint: {"center_x": 0.2 , "center_y":0.9}
       size_hint: 0.4, 0.10

   TextInput:
       id: password
       hint_text: "Password"
       multiline: False
       pos_hint: {"center_x": 0.2, "center_y": 0.8}
       size_hint: 0.4, 0.10
       password: True


   Button:
       pos_hint:{"x":0.3,"y":0.05}
       size_hint: 0.4, 0.1
       text: "Login"
       font_size: (root.width**2 + root.height**2)  / 14**4
       background_color: (0.082, 0.549, 0.984, 1.0)
       background_normal: ''
       on_release:
           app.page.sign_in_existing_user(email.text, password.text)

<ProfileWindow>:


   canvas.before:
       Color:
           rgba: 1, 1, 1, 1
       Rectangle:
           pos: self.pos
           size: self.size

   Button:
       pos_hint:{"x":0.3,"y":0.05}
       size_hint: 0.4, 0.1
       text: "Print localId"
       font_size: (root.width**2 + root.height**2)  / 14**4
       background_color: (0.082, 0.549, 0.984, 1.0)
       background_normal: ''
       on_release:
           root.print_localId()


WindowManager:
id:窗口管理器
登录窗口:
id:登录
名称:“登录”
配置文件窗口:
id:第页
名称:“第页”
在以下情况之前:
颜色:
rgba:1,1,1,1
矩形:
pos:self.pos
大小:self.size
文本输入:
id:电子邮件
提示文字:“电子邮件”
多行:False
pos_提示:{“center_x”:0.2,“center_y”:0.9}
尺寸提示:0.4,0.10
文本输入:
id:密码
提示文字:“密码”
多行:False
pos_提示:{“center_x”:0.2,“center_y”:0.8}
尺寸提示:0.4,0.10
密码:True
按钮:
pos_提示:{“x”:0.3,“y”:0.05}
尺寸提示:0.4,0.1
文本:“登录”
字体大小:(根.宽**2+根.高**2)/14**4
背景颜色:(0.082,0.549,0.984,1.0)
背景\u正常:“”
发布时:
app.page.sign\u in\u现有用户(email.text、password.text)
:
在以下情况之前:
颜色:
rgba:1,1,1,1
矩形:
pos:self.pos
大小:self.size
按钮:
pos_提示:{“x”:0.3,“y”:0.05}
尺寸提示:0.4,0.1
文本:“打印本地化”
字体大小:(根.宽**2+根.高**2)/14**4
背景颜色:(0.082,0.549,0.984,1.0)
背景\u正常:“”
发布时:
root.print_localId()
回溯

[INFO   ] [Base        ] Leaving application in progress...
Traceback (most recent call last):
  File "/Users/temitayoadefemi/PycharmProjects/test6/mainfile.py", line 109, in <module>
    MyApp().run()
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/app.py", line 855, in run
    runTouchApp()
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/base.py", line 504, in runTouchApp
    EventLoop.window.mainloop()
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/core/window/window_sdl2.py", line 747, in mainloop
    self._mainloop()
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/core/window/window_sdl2.py", line 479, in _mainloop
    EventLoop.idle()
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/base.py", line 342, in idle
    self.dispatch_input()
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/base.py", line 327, in dispatch_input
    post_dispatch_input(*pop(0))
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/base.py", line 293, in post_dispatch_input
    wid.dispatch('on_touch_up', me)
  File "kivy/_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/uix/behaviors/button.py", line 179, in on_touch_up
    self.dispatch('on_release')
  File "kivy/_event.pyx", line 703, in kivy._event.EventDispatcher.dispatch
  File "kivy/_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
  File "kivy/_event.pyx", line 1098, in kivy._event.EventObservers._dispatch
  File "/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site-packages/kivy/lang/builder.py", line 64, in custom_callback
    exec(__kvlang__.co_value, idmap)
  File "/Users/temitayoadefemi/PycharmProjects/test6/kivy.kv", line 86, in <module>
    root.print_localId()
  File "/Users/temitayoadefemi/PycharmProjects/test6/mainfile.py", line 73, in print_localId
    print(self.localId.text)
AttributeError: 'ProfileWindow' object has no attribute 'localId'
[INFO][Base]正在退出应用程序。。。
回溯(最近一次呼叫最后一次):
文件“/Users/temitayoadefemi/PycharmProjects/test6/mainfile.py”,第109行,在
MyApp().run()
文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/app.py”,第855行,运行中
runTouchApp()
runTouchApp中的文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/base.py”,第504行
EventLoop.window.mainloop()
文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/core/window/window_sdl2.py”,第747行,在主循环中
self._mainloop()
文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/core/window/window_sdl2.py”,第479行,在主循环中
EventLoop.idle()
文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/base.py”,第342行,处于空闲状态
self.dispatch_input()
文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/base.py”,第327行,发送输入
发送后输入(*pop(0))
文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/base.py”,第293行,发送后输入
wid.dispatch('我在润色时)
文件“kivy/_event.pyx”,第707行,在kivy.\u event.EventDispatcher.dispatch中
文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/uix/behaviors/button.py”,第179行,在线触摸
自我分派(“发布时”)
文件“kivy/_event.pyx”,第703行,在kivy.\u event.EventDispatcher.dispatch中
文件“kivy/_event.pyx”,第1214行,在kivy.\u event.eventobservators.dispatch中
文件“kivy/_event.pyx”,第1098行,在kivy.\u event.eventobserver.\u调度
自定义回调中的文件“/Users/temitayoadefemi/PycharmProjects/test6/venv/lib/python3.7/site packages/kivy/lang/builder.py”,第64行
exec(\uuuukVLANG\uuuuuuu.co\u值,idmap)
文件“/Users/temitayoadefemi/PycharmProjects/test6/kivy.kv”,第86行,in
root.print_localId()
文件“/Users/temitayoadefemi/PycharmProjects/test6/mainfile.py”,第73行,打印为
打印(self.localId.text)
AttributeError:“ProfileWindow”对象没有属性“localId”

与“我的代码”相比,您在kivy.kv中没有定义localId,并且您没有将对象初始化为属性。 因此,这将是:

代码:

class ProfileWindow(Screen):
    localId = NumericProperty()

    def __init__(self):
        self.localId = None 
测试电压5.kv

<ProfileWindow>:
    name: "page"
    localId: localId
:
名称:“第页”
本地化的:本地化的

配置文件窗口中有两个
\uuuu init\uuuu()
方法。第二个重新定义、覆盖第一个属性,并且不创建
localId
属性。
ProfileWindow
中唯一的
\uuuuu init\uuuu()方法应该是:

   def __init__(self, **kwargs):
       super(ProfileWindow, self).__init__(**kwargs)
       self.localId = None
下一个问题是您正在创建3个
ProfileWindow
实例。你只需要一个。因此,删除该行:

window = ProfileWindow()
并从
应用程序中的
build()
方法中删除:

self.page = ProfileWindow()
ProfileWindow
由代码中的行创建:

sm = Builder.load_file("kivy.kv")
任何其他使用
ProfileWindow()
的操作都会创建一个不属于GUI的
ProfileWindow
的新实例

接下来,当您按下
登录
按钮
时,需要访问
档案窗口的正确实例。为此,请使用
kv
文件中的
ids
,如下所示:

    on_release:
        app.root.ids.page.sign_in_existing_user(email.text, password.text)
我认为最后一个错误是,您的
print\u localId()
方法尝试打印
localId
text
属性,但它没有这样的属性。只需将该方法更改为:

   def print_localId(self):
       print(self.localId)

为什么你总是用不同的帐号问同样的问题,然后删除其他的?@RandomUser问题越新,它得到的关注就越多。这对关注标签的人来说很烦人。即便如此,给它一些时间,耐心一点。同样的问题今天才被问到。删除它是对回答并试图帮助的人的不尊重。请添加kv文件的内容,因为它在错误消息中提到。您的回溯表明