2017-07-06 76 views
0

我是一個完全業餘的程序員。所以我剛開始學習Kivy並刷新了我的Python內存,因爲我需要製作一個移動應用程序。我有點理解OOP的基本概念,但沒有其他。我沒有參加任何課程或其他任何課程,我只是隨着我一起前進。如何在Kivy中爲循環添加堆棧佈局?

所以我有一個基本的菜單設置與其他屏幕,所有的按鈕採取。我想添加一個堆疊佈局,其中有一堆圖像(名稱爲1.jpg,2.jpg),在其他屏幕下帶有字幕。我明白,如何在Python中實現這一點,我只是不知道如何在Kivy中做到這一點。我可以在.kv文件中將它們全部一一添加,但這需要很長時間。我嘗試了很多不同的組合,但我開始明白,我遠遠沒有接受足夠的教育,在類和對象這樣做。我永遠無法得到add_widget的權利,因爲我無法正確定位代碼,所以它甚至會運行,並且2)將它指向正確的屬性,所以即使它運行,結果也不會出現。

for循環,我通常用於測試:

g = Stack() 

for i in range(9) 
    btn = Button(text=("Test" + str(i), size_hint=(0.2, 0.1)) 
    g.add_widget(btn) 

我在網上看了一下,我的一切是我缺少一個「自我」或「根」的地方。我不知道如何將.kv文件與add_widget相結合。對於基本菜單,我遵循一個簡單的教程。

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.widget import * 
from kivy.uix.screenmanager import * 
from kivy.lang import Builder 
from kivy.uix.relativelayout import RelativeLayout 
from kivy.uix.stacklayout import StackLayout 
from kivy.uix.image import Image 
from kivy.properties import * 
from kivy.config import Config 
from kivy.uix.button import Button 
Config.set('graphics', 'width', '411') 
Config.set('graphics', 'height', '731') 

class Background(Image): 
    pass 

class Relative(RelativeLayout): 
    pass 

class Stack(StackLayout): 
    pass 

class MainMenu(Screen): 
    pass 

class Other(Screen): 
    pass 

class ScreenManagement(ScreenManager): 
    pass 

start = Builder.load_file("KVFile.kv") 

class MainApp(App): 
    def build(self): 
     return start 

MainApp().run() 

的.kv文件:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition 

ScreenManagement: 
    transition: FadeTransition() 
    MainMenu: 
    Other: 

<MainMenu>: 

    # ///// BACKGROUND IMAGE ///// 

    name: 'main' 
    Background: 
     source: 'BG.jpg' 
     background_color: .34, .2, .48, .7 
     size_hint: None, None 
     pos_hint: {'center_x': 0.5, 'center_y': 0.5} 
     size: 800, 800 

    # ///// MAIN MENU BUTTON LAYOUT ///// 

    Relative: 

     Button: 
      font_name: 'Effra_Std_Bd' 
      font_size: 35 
      text: "LOREM" 
      on_release: app.root.current = "other" 
      background_color: .34, .2, .48, .7 
      size_hint: 0.39, 0.09 
      pos_hint: {'center_x': 0.3, 'center_y': 0.4} 

     Button: 
      font_name: 'Effra_Std_Bd' 
      font_size: 35 
      text: "IPSUM" 
      on_release: app.root.current = "other"   
      background_color: .34, .2, .48, .7 
      size_hint: 0.39, 0.09 
      pos_hint: {'center_x': 0.7, 'center_y': 0.4} 

     Button: 
      font_name: 'Effra_Std_Bd' 
      font_size: 35 
      text: "DOLOR" 
      on_release: app.root.current = "other"   
      background_color: .34, .2, .48, .7 
      size_hint: 0.39, 0.09 
      pos_hint: {'center_x': 0.3, 'center_y': 0.3} 

     Button: 
      font_name: 'Effra_Std_Bd' 
      font_size: 35 
      text: "SIT" 
      on_release: app.root.current = "other"   
      background_color: .34, .2, .48, .7 
      size_hint: 0.39, 0.09 
      pos_hint: {'center_x': 0.7, 'center_y': 0.3} 

     Button: 
      font_name: 'Effra_Std_Bd' 
      font_size: 35 
      text: "AMET" 
      on_release: app.root.current = "other"   
      background_color: .34, .2, .48, .7 
      size_hint: 0.39, 0.09 
      pos_hint: {'center_x': 0.3, 'center_y': 0.2} 

     Button: 
      font_name: 'Effra_Std_Bd' 
      font_size: 35 
      text: "OTHER" 
      on_release: app.root.current = "other"   
      background_color: .34, .2, .48, .7 
      size_hint: 0.39, 0.09 
      pos_hint: {'center_x': 0.7, 'center_y': 0.2} 

<Other>: 
    name: 'other' 
    Stack: 

我知道這是一種特定的不是很的問題,我應該學習的文檔,但信息量有壓倒性的。

回答

0

我不知道什麼定義__init__函數做了,但它沒有辦法。

class Other(Screen): 
    pass 

class Stack(StackLayout): 
    def __init__(self, **kwargs): 
     super(Stack, self).__init__(**kwargs) 
     for i in range(9): 
      btn = Button(size_hint=(0.2, 0.1), text=("Test" + str(i))) 
      self.add_widget(btn) 

而且

<Other>: 
    name: 'other' 
    Stack: