0

現在、kivyでモバイルアプリを構築しています。画面の 1 つに MDExpansionPanel を含めようとしていますが、さまざまなコードを試し、Web で解決策を検索しましたが、エラーが発生するか、単に拡張パネルが画面に表示されません。5 つの画面があるため、ScreenManager を使用していますが、その数を増やす可能性があります。

関連する Python コードは次のとおりです。

from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.app import MDApp
from kivymd.theming import ThemeManager
from kivymd.toast import toast
from kivymd.uix.picker import MDDatePicker, MDTimePicker
from kivymd.uix.expansionpanel import MDExpansionPanel 
from kivymd.uix.boxlayout import MDBoxLayout

class LoginWindow(Screen):
    pass

class CreateAccountWindow(Screen):
    pass

class MainWindow(Screen):
    pass

class TravelManagerWindow(Screen):
    pass


class IngActivWindow(Screen):
    panel_container = ObjectProperty(None)


    def on_pre_enter(self, *args):
        self.add_panels()

    def show_timepicker(self):
        picker = MDTimePicker()
        picker.bind(time=self.got_time)
        picker.open()

    def got_time(self, picker_widget, time):
        self.text = str(time.hour) + ":" + str(time.minute)
        self.focus = False
        # selectedTime= self.text
        print(self.text)
        self.ids.tiempoActiv.text = self.text

    def add_panels(self):
        for i in range(5):
            IngActivWindow.ids.panel_container.add_widget(
                MDExpansionPanel(
                    icon="actividades.png",
                    content=MyContent(),
                    panel_cls=MDExpansionPanelOneLine(
                        text="Text",
                    )
                )
            )

class MyContent(MDBoxLayout):
    pass


class WindowManager(ScreenManager):

    ScreenManager().add_widget(LoginWindow(name='login'))
    ScreenManager().add_widget(CreateAccountWindow(name='create'))
    ScreenManager().add_widget(MainWindow(name='main'))
    ScreenManager().add_widget(IngActivWindow(name='ingActiv'))
    ScreenManager().add_widget(TravelManagerWindow(name='travelManager'))


class powerApp1(MDApp):

    def build(self):
        self.theme_cls.primary_palette = "Teal"
        return WindowManager()

if __name__ == "__main__":
    powerApp1().run()

関連するkvコードは次のとおりです:(背景に画像があり、拡張パネルを追加しようとしているMDBoxLayoutの前にアクションバーがあります)

<WindowManager>:
    LoginWindow:
    CreateAccountWindow:
    MainWindow:
    IngActivWindow:
    TravelManagerWindow:


<IngActivWindow>:
name: 'ingActiv'
panel_container: panel_container

FloatLayout:
    cols:1

    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'ingActiv_background.png'

    ActionBar:
        pos_hint: {'top':1}
        ActionView:
            use_separator: True
            ActionPrevious:
                title: '---------'
                with_previous: False

            ActionButton:

                icon: 'homeIcon.png'
                on_press:
                    root.manager.current = 'main'
                    root.manager.transition.direction =  'right'

            ActionGroup:
                text: 'Gastos de Viaje'
                mode: 'spinner'
                size_hint:(None,None)
                size: root.width/5,root.height/12

                ActionButton:
                    text: 'Solicitar'
                    on_release:
                        root.manager.current = 'solicitud'
                        root.manager.transition.direction =  'left'

                ActionButton:
                    text: 'Comprobar'
                    on_release:
                        root.manager.current = 'comprobar'
                        root.manager.transition.direction =  'left'

            ActionGroup:
                text: 'Opciones'
                mode: 'spinner'
                size_hint:(None,None)
                size: root.width/5,root.height/12

                ActionButton:
                    text: 'Ingresar Actividad'
                    on_release:
                        root.manager.current = 'ingActiv'
                        root.manager.transition.direction =  'left'

                ActionButton:
                    text: 'Enviar Reporte'

                ActionButton:
                    text: 'Cerrar Sesion'
                    on_release:
                        root.manager.current = 'login'
                        root.manager.transition.direction = 'down'

    MDBoxLayout:
        cols:1
        size_hint: 1,0.6
        pos_hint: {"center_x": 0.5, "center_y": 0.5}

        ScrollView:
            GridLayout:
                id: panel_container
                cols: 1
                pos_hint: {"center_x": 0.5, "center_y": 0.5}

<MyContent>:
    size_hint: 1, None
    height: self.minimum_height
    orientation: 'horizontal'
    Button:
        size_hint: None, None

どうぞよろしくお願いいたします。

4

0 に答える 0