【问题标题】:How to create a Label in another screen using a Button in Kivy如何使用 Kivy 中的按钮在另一个屏幕中创建标签
【发布时间】:2020-12-03 18:26:09
【问题描述】:

我有一个小问题,当按下MenuScreen 中的按钮时,我试图在LabelScreen 中创建标签。我设法做的最接近的事情是让标签与按钮出现在同一屏幕上。

以下代码只是我想要实现的一个简单示例。任何帮助都将不胜感激!

.py

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.button import Button,ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.popup import Popup
from kivy.core.window import Window
from kivy.properties import ObjectProperty, NumericProperty

class MenuScreen(Screen):
    def Item1(self,button):
        App.get_running_app().cart += 5
        label1 = Label(text="Item 1: $5", font_size=25)
        self.add_widget(label1)

class LabelScreen(Screen):
    pass

class WindowManager(ScreenManager):
    pass

class ExampleApp(App):
    cart = NumericProperty(0)
    def build(self):
        return WindowManager()

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

.kv

#:import SlideTransition kivy.uix.screenmanager.SlideTransition

<WindowManager>:
    MenuScreen:
    LabelScreen:

<MenuScreen>:
    name: "menu"

    FloatLayout:
        Button:
            text: "Add to cart"
            size_hint: 0.5,0.05
            pos_hint: {"x": 0.25, "y": 0.25}
            on_release:
                root.Item1(self)
        Label:
            text: "Cart: " + str(app.cart)
            font_size: 25
            pos_hint: {"x": 0.25, "y": 0.25}
        Button:
            text: "Label Screen"
            size_hint: 0.5,0.05
            pos_hint: {"x": 0.25, "y": 0.1}
            on_release:
                app.root.transition = SlideTransition(direction = "left")
                app.root.current = "label"

<LabelScreen>:
    name: "label"

    FloatLayout:
        Label:
            text: "I want Item1 Label to appear here \n instead of in the MenuScreen"
            font_size: 25
            pos_hint: {"x": 0, "y": 0.25}
        Button:
            text: "Back"
            size_hint: 0.5,0.05
            pos_hint: {"x": 0.25, "y": 0.1}
            on_release:
                app.root.transition = SlideTransition(direction = "right")
                app.root.current = "menu" 

【问题讨论】:

    标签: python button kivy label


    【解决方案1】:

    您必须引用要添加wiget的正确屏幕窗口。

    由于您首先要在 python 类中添加小部件,因此我们必须让应用程序运行,然后我们可以导航到我们想要的屏幕:

    def Item1(self,button):
        App.get_running_app().cart += 5
        label1 = Label(text="Item 1: $5", font_size=25)
    
        app_running = App.get_running_app()
        root_screen = app_running.root
        label_screen = root_scren.get_screen('label')
        label_screen.add_widget(label1)
    
        # Or simply:
        # App.get_running_app().root.get_screen('label').add_widget(label1)
    

    【讨论】:

    • 感谢您的快速回复和帮助!正是我想要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多