2017-06-05 71 views
0

我已經使用了可用的主題來改進我的代碼,但仍然不起作用。運行代碼給我Attribute error:'NoneType' object has no attribute 'add_widget'在kivy中製作下拉列表。 'NoneType'對象沒有屬性'add_widget'

class Datownik(DropDown): 
    pass 

class ZleceniaPojedyncze(Screen): 
    dzienButton = ObjectProperty(None) 
    miesiacButton = ObjectProperty(None) 
    top_layout = ObjectProperty(Screen) <------ changed 
    rokButton = ObjectProperty(None) 
    dd_btn = ObjectProperty(None) 

    def __init__(self, *args, **kwargs): 
     super(ZleceniaPojedyncze, self).__init__(*args, **kwargs) 
     self.drop_down = Datownik() 

     dropdown = DropDown() 
     notes = ['alpha', 'beta', 'gamma', 'delta'] 
     for note in notes: 

      btn = Button(text='bcda', size_hint_y=None, height=30) 
      btn.bind(on_release=lambda btn: dropdown.select(btn.text)) 
      dropdown.add_widget(btn) 

     mainbutton = Button(text='abcd') 
     print("yay") 

     mainbutton.bind(on_release=dropdown.open(self)) <--added self param. 

     dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x)) 

     self.top_layout.add_widget(mainbutton) 

,這裏是coresponding KV文件:

<Datownik>: 
Button: 
    text: 'B1' 
    height: 44 
    on_release: root.select('item1') 
Button: 
    text: 'B2' 
    height: 44 
    on_release: root.select('item1') 
Button: 
    text: 'B3' 
    height: 44 
    on_release: root.select('item1') 

<ZleceniaPojedyncze>: 
name: 'zp' 
dzienButton: dzienButtonID 
dd_btn: btn_ddID  
top_layout: topLayoutID 
GridLayout: 
    id: topLayoutID 
    height: self.minimum_height 
    row_force_default: 'true' 
    row_default_height: 30 
    col_force_default: 'true' 
    col_default_width: 70 
    cols: 4 
    padding: 70 
    Button: 
     id: dzienButtonID 
     text: 'day' 
    Button: 
     id: btn_ddID 
     text: 'month' 
     on_release: root.drop_down.open(self) 
    Button: 
     text: 'year' 
    Button: 
     text: 'back' 
     on_release: app.root.current = 'mm' 

我只希望把它與一個按鈕的工作現在,只需下拉菜單,以後我會嘗試找出哪一部分做什麼爲我的需要配置此菜單,但我想我混淆了事情,不能繼續。 Any1有幫助嗎?

回答

0

您的top_layout被宣佈爲ObjectProperty(None),然後您在嘗試向其添加小部件時顯示無:self.top_layout.add_widget(mainbutton)

+0

好吧,所以我改變了屏幕和其他東西的對象屬性,所有來到我的頭。當設置爲Screen屬性時,它返回TypeError:add_widget()缺少1個需要的位置參數:'小部件'。我應該設置什麼屬性? – LSM

+0

首先,我沒有辦法知道你改變了什麼。其次,'TypeError:add_widget()缺少1個參數'意味着你不能只使用'layout.add_widget()'而不使用小部件。例如,可以使用'layout.add_widget(button)'。 –

+0

首先想說我認識你的幫助。那很好。過了一段時間,我意識到小部件缺少參數時出現了什麼問題,我將該屬性留作屏幕,但在更改之後還有另一個錯誤。 DropDownException:無法在隱藏的小部件上打開下拉列表。可愛的「top_widget」並不是真正的頂級部件。這一定是使用屏幕管理器的後果,有什麼辦法解決它? – LSM

相關問題