簡體   English   中英

如何在Kivy中為循環添加堆棧布局?

[英]How to add a stack layout for loop in Kivy?

我是一個完全業余的程序員。 所以我剛開始學習Kivy並刷新我的Python內存,因為我需要制作一個移動應用程序。 我有點理解OOP的基本概念,但除此之外沒有太多其他知識。 我還沒有參加任何課程或任何課程,只是隨身攜帶。

因此,我在基本菜單上設置了另一個屏幕,所有按鈕都進入了該菜單。 我想添加一個堆棧布局,其中包含一堆圖像(名為1.jpg,2.jpg),並在該屏幕的下方帶有標題。 我知道,如何在Python中做到這一點,我只是不知道如何在Kivy中做到這一點。 我可以在.kv文件中一一將它們全部添加,但是要花一些時間。 我嘗試了很多不同的組合,但是我開始理解,我對類和對象的了解遠不足以做到這一點。 我永遠無法正確使用add_widget,因為我永遠無法:1)正確放置代碼以使其運行,以及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:

我知道這不是一個非常具體的問題,我應該研究文檔,但是那里的信息量卻是壓倒性的。

我不知道定義__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:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM