2016-06-10 126 views
0

我已經寫了一個GridLayout的代碼,需要在Python文件中添加按鈕。所以,add_widget()主要應該在build()中完成。我得到的錯誤,無法得到它。有人請幫助我。如何在kivy中傳遞參數build()?

總之,而不是add_btn(),我需要MineApp類的build()。在advance.`

感謝

main.py

from kivy.app import App 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.widget import Widget 
from kivy.uix.button import Button 
from kivy.properties import ObjectProperty 
from kivy.uix.boxlayout import BoxLayout 

class MainLayout(BoxLayout): 
    def build(self): 
     pass 
    def add_btn(self,id): 
     for i in range(100): 
      id.add_widget(Button()) 
class MineApp(App): 
    def build(self): 
     return MainLayout() 

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

mine.kv文件:

<MainLayout>: 
    orientation:'vertical' 
    BoxLayout: 
     orientation:'horizontal' 
     height: '30px' 
     size_hint_y:None 
     TextInput: 
      id: tinput 
      text:'10' 
     Button: 
      text:'start' 
      on_press:root.add_btn(grid) 
     Label: 
      id:mylabel 
      text:'0' 
    GridLayout: 
     id: grid 
     cols:10 
     rows:10 

回答

0

花了一些時間,但覺得我得到你想要說些什麼!你可以通過電網的id參數中,像這樣的.py文件獲得同樣的效果......

class MainLayout(BoxLayout): 
    def build(self): 
     for i in range(100): 
      self.ids.grid.add_widget(Button()) 

然後,你可以把你的啓動按鈕,...

Button: 
    text:'start' 
    on_press:root.build() 

這是可行的,因爲.py中的「self」指的是類中的類,而在.kv中類似的措辭將是'root'(而.kv中的'self'指的是小部件!)這是你想要的嗎?讓我知道!我嘗試過了自己,並通過:)

也有運行沒有問題,它沒有明確地把這裏來測試你需要通過進口Builder中的代碼:

from kivy.lang import Builder 

做...

Builder.load_file("mine.kv") 

爲您的.py和.kv不共享相同的名稱(你還是會需要添加一個「#FILE名稱:main.py」的.kv如果他們這麼做匹配名稱!除此之外,它看起來不錯!

+0

您的代碼工作perf實際上,但是會發生什麼情況是隻有當我點擊開始按鈕時纔會添加按鈕。否則,如果它存在於build()中,則會在創建活動時自動創建按鈕,而不是等待按鈕按下。有任何想法嗎?謝謝 –