在kivy程序中,location属性未添加到我的小部件中

时间:2015-02-10 09:24:53

标签: android python-2.7 kivy

这是我的Python代码, 我正在从“在kivy中创建应用程序”一书中学习kivy,但是“我试图自己编写代码”但是我被困在这里'

在此代码中,当我单击列表视图小部件上的任何按钮时,它会显示错误:

我试图解决它过去几个小时......

from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.listview import ListItemButton 
from kivy.properties import ListProperty,ObjectProperty
from kivy.factory import Factory
class ListButton(ListItemButton):
    # List Button Must Have location property been set to List Property so that
    # values returned by args_converter must get stored to it 
    location = ListProperty()

class Weather2App(App):
    pass 

class MainWindow(BoxLayout):

    def this(self):
        # we have have created a list here with strings in it
        cities = [('city','town2'),('city2','town3')]

        # here we have assigned this list to item_strigs property of the 
        # list item button , which is data
        self.list_item.item_strings = cities

        # using this we are forcing the object to show data on screen
        self.list_item._trigger_reset_populate()
        # this args conerter takes two argument , it is converting 
        # data into a dictionary
    def args_converter(self,index,data_item):
        city,town = data_item 
        return {'location':(city,town)}

class MainCity(BoxLayout):
    pass

class MainWindow1(BoxLayout):
    this_wid = ObjectProperty()
    def show_city(self,location=None):
        self.clear_widgets()
        if location is None and self.this_wid is Nonw:
            self.this_wid.location = ['NEW','yORK']
        if location is not None:
            self.this_wid = Factory.MainCity()
            self.this_wid.location = location
        self.add_widget(self.this_wid)




if __name__=='__main__':
    Weather2App().run()

Kivy Code:

#: import ListAdapter kivy.adapters.listadapter.ListAdapter
#:import main2 main2


<ListButton>:
    text:'{} ({})' .format(self.location[0],self.location[1])
    on_press:app.root.show_city(self.location)
<MainWindow>:
    list_item:_list_item
    Button:
        text:'this is a button'
        on_press:root.this()
    ListView:
        id:_list_item
        # here adapter is a kivy property ,but it s value is python , 
        # in which wea are constructing a kivy ListAdapter object

        adapter:
            ListAdapter(data=[],cls=main2.ListButton,args_converter=root.args_converter)
MainWindow1:
    MainWindow:

<MainCity>:
    Label:

        text:'{} ({})' .format(root.location[0],root.location[1])

错误:

Ii显示'MainWindow'对象没有属性'location'

1 个答案:

答案 0 :(得分:0)

因为您的位置只是一个临时变量。将其设为属性并调用self.location