Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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 NumericProperty到StringProperty_Python_Properties_Kivy - Fatal编程技术网

Python kivy NumericProperty到StringProperty

Python kivy NumericProperty到StringProperty,python,properties,kivy,Python,Properties,Kivy,我试着用kivy做我自己的Coockie Clicker,但是用cristmas coockies。 我创建了一个Coockie的图像,你可以点击,还有一个标签显示你点击了多少次。 标签需要一个字符串,因此我尝试将numeric属性转换为字符串,但无效,因为我收到了错误消息: <kivy.properties.NumericProperty object at 0xa6e32cc> 以下是代码的其余部分: from kivy.app import App from kivy.lan

我试着用kivy做我自己的Coockie Clicker,但是用cristmas coockies。 我创建了一个Coockie的图像,你可以点击,还有一个标签显示你点击了多少次。 标签需要一个字符串,因此我尝试将numeric属性转换为字符串,但无效,因为我收到了错误消息:

<kivy.properties.NumericProperty object at 0xa6e32cc>
以下是代码的其余部分:

from kivy.app import App
from kivy.lang import Builder

from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.core.window import Window

from kivy.clock import Clock
from kivy.animation import Animation
from  kivy.core.text.markup import *

from kivy.uix.floatlayout import FloatLayout
from kivy.properties import NumericProperty
from kivy.properties import StringProperty

Builder.load_string('''
<Root>:

    Kecks:
        pos: 300, 300
<Kecks>:
    Image:
        pos: root.pos
        id: my_image
        source: 'piernik.png'

    Label:
        id: my_Label
        font_size: 50
        text: root.txt
        center_x: root.width / 4

''')

class Root(FloatLayout):
    pass

class Kecks(Widget):

    count = NumericProperty(0)
    amount = NumericProperty(1)
    txt = StringProperty(str(count))

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            self.count += self.amount
            print self.txt


class app(App):
    def build(self):
        Window.clearcolor = (10, 0, 0, 1)
        return Root()

if __name__ == "__main__":
    app().run()
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.widget导入widget
从kivy.uix.label导入标签
从kivy.core.window导入窗口
从kivy.clock导入时钟
从kivy.animation导入动画
从kivy.core.text.markup导入*
从kivy.uix.floatlayout导入floatlayout
从kivy.properties导入NumericProperty
从kivy.properties导入StringProperty
Builder.load_字符串(“”)
:
凯克斯:
位置:300300
:
图片:
pos:root.pos
我的照片
资料来源:“piernik.png”
标签:
我的标签
字体大小:50
文本:root.txt
中心x:root.width/4
''')
类根(浮动布局):
通过
类Kecks(小部件):
count=NumericProperty(0)
金额=数值属性(1)
txt=StringProperty(str(计数))
def on_触控向下(自身,触控):
如果自碰撞点(*touch.pos):
self.count+=self.amount
打印self.txt
类应用程序(应用程序):
def生成(自):
Window.clearcolor=(10,0,0,1)
返回根()
如果名称=“\uuuuu main\uuuuuuuu”:
app().run()

这不是错误消息,而是标识属性实例的字符串。你的意思是你真的出错了,还是你的程序打印出来了?我猜是后者,因为

count = NumericProperty(0)
amount = NumericProperty(1)
txt = StringProperty(str(count)) 
要理解这一点,您需要了解一些属性是如何工作的——您在类级别而不是在方法中声明它们,因此它们是类的属性(作为单个实例的属性继承)。这样做的一个效果是类的所有实例共享相同的属性对象

当您在方法中访问它们时,例如使用
self.count
,您会得到一个特定于实例的结果,其行为类似于普通的非属性属性,即使它实际上是一个属性对象,因为属性在内部负责返回正确的东西(我认为说它是一个属性是正确的)

这里发生的事情是,您在类级别访问结果,而结果没有任何特殊行为-您要求
str(count)
,这就是您得到的,标识属性对象的字符串

也许解决这个问题的正确方法是

class Kecks(Widget):
    count = NumericProperty(0)
    amount = NumericProperty(1)
    txt = StringProperty()

    def __init__(self, *args, **kwargs):
        super(Kecks, self).__init__(*args, **kwargs):
        self.txt = str(self.count)
通过在
\uuuu init\uuuu
中设置值,可以获得正确的实例级行为。您也可以通过访问count.defaultvalue来获取它的实际值,但这可能不是一个好主意


如果您想将txt绑定到count的值(自动更改为track str(count)),您必须再次执行更多操作,但我不清楚这是否是您的意图,因此我不会深入讨论,您可以检查文档。

这不是错误消息,这是标识属性实例的字符串。你的意思是你真的出错了,还是你的程序打印出来了?我猜是后者,因为

count = NumericProperty(0)
amount = NumericProperty(1)
txt = StringProperty(str(count)) 
要理解这一点,您需要了解一些属性是如何工作的——您在类级别而不是在方法中声明它们,因此它们是类的属性(作为单个实例的属性继承)。这样做的一个效果是类的所有实例共享相同的属性对象

当您在方法中访问它们时,例如使用
self.count
,您会得到一个特定于实例的结果,其行为类似于普通的非属性属性,即使它实际上是一个属性对象,因为属性在内部负责返回正确的东西(我认为说它是一个属性是正确的)

这里发生的事情是,您在类级别访问结果,而结果没有任何特殊行为-您要求
str(count)
,这就是您得到的,标识属性对象的字符串

也许解决这个问题的正确方法是

class Kecks(Widget):
    count = NumericProperty(0)
    amount = NumericProperty(1)
    txt = StringProperty()

    def __init__(self, *args, **kwargs):
        super(Kecks, self).__init__(*args, **kwargs):
        self.txt = str(self.count)
通过在
\uuuu init\uuuu
中设置值,可以获得正确的实例级行为。您也可以通过访问count.defaultvalue来获取它的实际值,但这可能不是一个好主意


如果您想将txt绑定到count的值(自动更改为track str(count)),您必须再次执行更多操作,但我不清楚这是否是您的意图,因此我不会深入讨论,您可以检查文档。

这不是错误消息,这是标识属性实例的字符串。你的意思是你真的出错了,还是你的程序打印出来了?我猜是后者,因为

count = NumericProperty(0)
amount = NumericProperty(1)
txt = StringProperty(str(count)) 
要理解这一点,您需要了解一些属性是如何工作的——您在类级别而不是在方法中声明它们,因此它们是类的属性(作为单个实例的属性继承)。这样做的一个效果是类的所有实例共享相同的属性对象

当您在方法中访问它们时,例如使用
self.count
,您会得到一个特定于实例的结果,其行为类似于普通的非属性属性,即使它实际上是一个属性对象,因为属性在内部负责返回正确的东西(我认为说它是一个属性是正确的)

这里发生的事情是,您在类级别访问结果,而结果没有任何特殊行为-您要求
str(count)
,这就是您得到的,标识属性对象的字符串

也许解决这个问题的正确方法是

class Kecks(Widget):
    count = NumericProperty(0)
    amount = NumericProperty(1)
    txt = StringProperty()

    def __init__(self, *args, **kwargs):
        super(Kecks, self).__init__(*args, **kwargs):
        self.txt = str(self.count)
通过在
\uuuu init\uuuu
中设置值,可以获得正确的实例级行为。你也可以随意访问count.defaultv