簡體   English   中英

Kivy Python:多個屏幕的按鈕和類

[英]Kivy Python: buttons and classes for multiple screens

我的 Kivy Python 代碼有問題。 我有 2 個屏幕:第一個是導航到第二個屏幕,在第二個屏幕上有一個按鈕可以將文本添加到滾動視圖......導航正在工作,但它沒有向滾動視圖添加任何文本......我想我這里需要一些幫助! AttributeError: 'super' 對象沒有屬性 ' getattr '

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock, mainthread
from kivy.core.window import Window
from kivy.uix.scrollview import ScrollView
from kivy.effects.scroll import ScrollEffect
from kivy.lang import Builder


Builder.load_string("""

<MenuScreen>:
    name: 'mainmenu'
    BoxLayout:
        spacing: 1
        orientation: "vertical"

        Label:
            text: "MAIN MENU"
        Button:
            text: 'Go to Screen 2'
            on_release: 
                root.manager.current = 'screen2'
                root.manager.transition.direction = "left"
        Button:
            text: 'Quit'
            on_release: root.manager.current = app.exit_software()
        

<Screen2>:
    name: 'screen2'
    BoxLayout:
        spacing: 1
        orientation: "vertical"

        ScrollView:
            id: scroll_view
            always_overscroll: False
            BoxLayout:
                size_hint_y: None
                height: self.minimum_height
                orientation: 'vertical'
                Label:
                    id: label
                    text: "You can add some Text here by pressing the button"
                    size_hint: None, None
                    size: self.texture_size 
        Button:
            text: 'Add text!'
            size_hint_y: 0.1
            on_release: app.add_text()
            

        Button:
            text: 'Back to main menu'
            size_hint_y: 0.1
            on_release: 
                root.manager.current = 'mainmenu'
                root.manager.transition.direction = "right"
            
""")

# Declare both screens
class MenuScreen(Screen):
   pass

class Screen2(Screen):
    pass

class AddTextApp(App):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)

    def build(self):
        # Create the screen manager
        sm = ScreenManager()
        sm.add_widget(MenuScreen(name='mainmenu'))
        sm.add_widget(Screen2(name='screen2'))

        return sm

    def add_text(self):
        self.root.ids.label.text += f"Some new Text\n"
        self.root.ids.scroll_view.scroll_y = 0

    def exit_software(self):
       App.get_running_app().stop()


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

非常感謝您提前!

發生錯誤是因為self.root.ids可以訪問位於主類的根小部件中的小部件。 要訪問輔助屏幕元素,您需要將其添加到主類(在您的情況下,在ScreenManager )並設置其id 另外,你有很多進口過剩,所以它是清晰可見的,我建議你使用Pycharm或類似的東西。

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder

kv = """
<MenuScreen>:
    name: 'mainmenu'
    BoxLayout:
        spacing: 1
        orientation: "vertical"

        Label:
            text: "MAIN MENU"
        Button:
            text: 'Go to Screen 2'
            on_release: 
                root.manager.current = 'screen2'
                root.manager.transition.direction = "left"
        Button:
            text: 'Quit'
            on_release: root.manager.current = app.exit_software()


<Screen2>:
    name: 'screen2'
    BoxLayout:
        spacing: 1
        orientation: "vertical"

        ScrollView:
            id: scroll_view
            always_overscroll: False
            BoxLayout:
                size_hint_y: None
                height: self.minimum_height
                orientation: 'vertical'
                Label:
                    id: label
                    text: "You can add some Text here by pressing the button"
                    size_hint: None, None
                    size: self.texture_size 
        Button:
            text: 'Add text!'
            size_hint_y: 0.1
            on_release: app.add_text()


        Button:
            text: 'Back to main menu'
            size_hint_y: 0.1
            on_release: 
                root.manager.current = 'mainmenu'
                root.manager.transition.direction = "right"
                

ScreenManager:
    MenuScreen:
        id: menu_scr
        
    Screen2:
        id: scr_2
        
"""


class MenuScreen(Screen):
    pass


class Screen2(Screen):
    pass


class AddTextApp(App):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def build(self):
        return Builder.load_string(kv)

    def add_text(self):
        self.root.ids.scr_2.ids.label.text += f"Some new Text\n"
        self.root.ids.scr_2.ids.scroll_view.scroll_y = 0

    @staticmethod
    def exit_software():
        App.get_running_app().stop()


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

暫無
暫無

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

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