Kivy Python - 传递参数并绑定kv和python文件

时间:2016-10-19 14:01:36

标签: python kivy kivy-language

我正在尝试绑定python类的属性(从BoxLayout小部件中获取)以及该类的kv配置文件。

我要做的是将一些值传递给类,并在kv文件TextInput id旁边打印该值(这是该类的kv描述)。当我运行我的代码时出现错误:

TypeError: addBoxClass() missing 1 required positional argument: 'someNumber'

我认为我过于复杂,因为这应该相当简单。 我的代码的一些部分,我希望很清楚:

#at some point in my main code I call SomeClass    
box=SomeClass()
box.add_widget(SomeClass.addBoxClass(someNumber)) #someNumber is a value that I want to print in  def printInput, next to the kv file's TextInput id.

#then this is the class
class SomeClass(BoxLayout):
def __init__(self, **kwargs):
    super(NumOfRoomsClass, self).__init__(**kwargs)
    self.number = None

def addBoxClass(self,someNumber):        
    self.number = someNumber  #This is where I get my error
    #create and rern a label
    boxLabel = BoxLayout()        
    Lab = Label(text= self.number )
    boxLabel.add_widget(Lab )
    return (boxLabel)

def printInput(self, text):
    input= int(text)
    print ("self.number = ", self.number , "input = ",input) #This is what I'm aftre

在我的.kv文件中我得到了这个:

<SomeClass>:
    Label:
        text: "Number of rooms"

    TextInput:  
        multiline: False
        id: inputId 
        on_text_validate: root.printInput(inputId.text)

2 个答案:

答案 0 :(得分:0)

当我查看你的代码时,我没有看到你在哪里调用addBoxClass()函数。

您创建了SomeClass的实例。其中:

self.number = None

如果验证textinput,它将调用printInput。 不调用addBoxClass()。

答案 1 :(得分:0)

您尝试从python文件中调用的someNumber似乎尚未定义。

#at some point in my main code I call SomeClass    
box=SomeClass()
box.add_widget(SomeClass.addBoxClass(someNumber)) #someNumber is a value   that I want to print in  def printInput, next to the kv file's TextInput id.

应该是

#at some point in my main code I call SomeClass 
someNumber  = 1
box=SomeClass()
box.add_widget(SomeClass.addBoxClass(someNumber)) #someNumber is a value that I want to print in  def printInput, next to the kv file's TextInput id.

someNumber在使用之前必须给出一个值