打印 NumericProperty() kivy 的值

Posted

技术标签:

【中文标题】打印 NumericProperty() kivy 的值【英文标题】:print the value of a NumericProperty() kivy 【发布时间】:2019-07-29 21:25:03 【问题描述】:

如果我的两个屏幕中有一个数字属性来计算一个人单击正确图标的次数,并且我想在单独的类中打印它,我该怎么做?我尝试使用print() 函数和print(StringProperty(str())),但我没有打印出数字值。当我在VerifyAA()VerifyBB() 中打印正确的计数器时,会打印正确的值。

class A(Screen):
    correct_counter1 = NumericProperty(0)
    def verifyAA(self, *args):
        if self.AA == V.Check1 or self.AA == V.Check2 or self.AA == V.Check3:
            print("You got it!!!")
            self.correct_counter1 =  self.correct_counter1 + 1
            print(self.correct_counter1)
            self.ids.aa.disabled = True

class B(Screen):
    correct_counter2 = NumericProperty(0)
    def verifyBB(self, *args):
        if self.BB == VV.Check1 or self.BB == VV.Check2 or self.BB == VV.Check3:
            print("You got it!!!")
            self.correct_counter2 =  self.correct_counter2 + 1
            print(self.correct_counter2)
            self.ids.bb.disabled = True

class Answers(Screen):
    print(A.correct_counter1)
    print(StringProperty(str(B.correct_counter2)))

这是分别打印出来的:

<NumericProperty name=correct_counter>
<StringProperty name=>

【问题讨论】:

【参考方案1】:

您需要了解类的定义和类的实例之间的区别。当您打印 A.correct_counter1 时,您打印的是在类级别定义的 NumericProperty 对象本身。这是唯一合理的结果 - 打印属性的值是没有意义的,因为它没有 值。例如,如果您写了instance1 = A(correct_counter1=1); instance2 = A(correct_counter1=20),您希望print(A.correct_counter1) 打印什么值?答案必须是两者都不是,属性的​​值是在每种情况下为类实例定义的,而不是类本身。

正确的解决方案是您必须通过类的实例打印属性的值。例如,如果您写instance = A(); print(instance.correct_counter1),您将打印出您所期望的数字。执行此操作的最佳方法取决于程序的结构和类之间的关系。您的示例不是可运行的程序,因此无法提出具体建议。如果您有一个实际示例想要执行此操作但不知道如何操作,请将其作为新问题发布。

【讨论】:

以上是关于打印 NumericProperty() kivy 的值的主要内容,如果未能解决你的问题,请参考以下文章

Kivy 更新动态标签文本

Kivy:实时更新小部件的颜色

Python / Kivy - 在调用函数的另一个屏幕中替换标签的值

如何打印在.kv(kivy)中输入的TextInput值,以打印在.py文件中?

无法在 KIVY Python 中打印取自 kivy.uix.textinput.TextInput 的文本

将 Gnuplot 打印到 Kivy 小部件