Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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 AttributeError:&x27;超级';对象没有属性'__getattr';_Python_Kivy - Fatal编程技术网

Python/Kivy AttributeError:&x27;超级';对象没有属性'__getattr';

Python/Kivy AttributeError:&x27;超级';对象没有属性'__getattr';,python,kivy,Python,Kivy,我无法重新加载用户的图片或个人资料。我想要重新加载的小部件包含在ScreenOne中,我在这个类中创建了用于重新加载的函数,并尝试从类更改中的函数调用它 提前谢谢你 这是我的main.py: from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.image import Image import readtable import Readpictureadress import sizeta

我无法重新加载用户的图片或个人资料。我想要重新加载的小部件包含在ScreenOne中,我在这个类中创建了用于重新加载的函数,并尝试从类更改中的函数调用它

提前谢谢你

这是我的main.py:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
import readtable
import Readpictureadress
import sizetable
import Match
import nbofpictures
import random
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.properties import ObjectProperty, NumericProperty, StringProperty
import kivy


size = sizetable.main()
Iduserp = (random.randint(1, size))
imagenb=0
picadress= Readpictureadress.main(Iduserp, 0)

class Manager(ScreenManager):

    screen_one = ObjectProperty(None)
    screen_two = ObjectProperty(None)

class ScreenTwo(Screen):
    print('screentwo')
    pass

class ScreenOne(Screen):
    img = StringProperty()
    global picadress
    global Iduserp


    def __init__(self, **kwargs):
        super(ScreenOne, self).__init__(**kwargs)
        self.img = picadress


    def displayScreenThenLeave(self):
        print('Displayscreen')

        self.changeScreen()

    def changeScreen(self):
        print('changescreen')

        if self.Manager.current == 'screen1':
            self.Manager.current = 'screen2'
        else:
            self.Manager.current = 'screen1'
    pass

    def reloadprofile(self):
        self.img = picadress
        self.ids.a1.reload()


class Change():
    global Iduserp
    global imagenb
    global picadress

    def changeuser(self):

        size = sizetable.main()
        Iduserp = (random.randint(1, size))
        app = App.get_running_app()
        app.screenone.reloadprofile()

    def changepicturenb (self):

        nbofpic = nbofpictures.main(Iduserp)
        if imagenb < nbofpic:
            imagenb += 1
        else:
            imagenb = 0
        app = App.get_running_app()
        app.screenone.reloadprofile()

class ScreensApp(App):
    print('ScreensApp')
    screenone=ScreenOne()
    varChange= Change()
    def build(self):
        m = Manager(transition=NoTransition())
        return m

if __name__ == "__main__":
    ScreensApp().run()

正如@eyllanesc所说:请提供一个最小的、完整的、可验证的例子。如果我们首先必须调试您的代码才能看到您的问题,那么我们需要做更多的工作来找出您的问题所在。但既然我有心情和Kivy一起玩:

你有几个问题。首先,更改您的
屏幕sapp

class ScreensApp(App):

    def build(self):
        self.varChange = Change()
        self.m = Manager(transition=NoTransition())
        return self.m
请注意,您创建的
ScreenOne
被删除,因为它是由
kv
文件中的
规则创建的。其他语句被移动到
build
方法中并保存为实例变量,因为您在其他地方需要它们。这也允许您在
kv
文件中引用
app.varChange

此外,您还需要修改
更改
类:

class Change():
    global Iduserp
    global imagenb
    global picadress

    def changeuser(self):

        size = sizetable.main()
        Iduserp = (random.randint(1, size))
        app = App.get_running_app()
        app.m.screen_one.reloadprofile()

    def changepicturenb (self):

        nbofpic = nbofpictures.main(Iduserp)
        if imagenb < nbofpic:
            imagenb += 1
        else:
            imagenb = 0
        app = App.get_running_app()
        app.m.screen_one.reloadprofile()
class Change():
全局Iduserp
全球图像nb
全球皮卡服饰
def更改用户(自身):
size=sizetable.main()
Iduserp=(random.randint(1,大小))
app=app.get_running_app()
app.m.screen_one.reloadprofile()
def changepicturenb(自身):
nbofpic=nbofpictures.main(Iduserp)
如果imagenb

ScreenOne
的引用作为
screen\u one
保存在
kv
文件中的
规则中,因此要访问它,您可以通过
app
访问
m
Manager
)引用,该引用保存在
build
方法中,然后转到
屏幕\u一个
属性,该属性也在
规则中定义。我认为这可能会解决您的问题,但我不能肯定,因为我必须对示例进行更改才能解决“问题”。

请对您的完美修改表示感谢。一旦我以后有更多的时间,我会修改我的帖子,以做出一个明确的例子。如果我理解得很清楚的话,那么从构建方法(self.m)开始,我案例中的所有屏幕都可以从应用程序访问。在这种情况下,自我是否重要?是的,
self
很重要。如果只在
build
方法中执行
m=Manager()
返回m
,则
m
的范围仅限于
build
方法,并且在该方法之外无法访问。使其成为
self.m
将在
App
实例中创建一个实例变量,该变量始终通过引用
App
实例可用。请注意,
管理器
实例也可以通过添加到该
管理器
的任何
屏幕
实例的
管理器
属性从您的
屏幕
实例中访问。
class ScreensApp(App):

    def build(self):
        self.varChange = Change()
        self.m = Manager(transition=NoTransition())
        return self.m
class Change():
    global Iduserp
    global imagenb
    global picadress

    def changeuser(self):

        size = sizetable.main()
        Iduserp = (random.randint(1, size))
        app = App.get_running_app()
        app.m.screen_one.reloadprofile()

    def changepicturenb (self):

        nbofpic = nbofpictures.main(Iduserp)
        if imagenb < nbofpic:
            imagenb += 1
        else:
            imagenb = 0
        app = App.get_running_app()
        app.m.screen_one.reloadprofile()