簡體   English   中英

如何在 kivy 的另一個屏幕中更改 label 文本值

[英]How to change label text value in another screen in kivy

所以我正在使用 Kivy/KivyMD 制作在線井字游戲,我有點卡在這里試圖編輯另一個屏幕的 label 的值。

這是main.py

from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, Screen
from requests import get

ip = get('https://api.ipify.org').text

class OptionScreen(Screen):
    pass

class JoinServer(Screen):
    pass

class CreateServer(Screen):
    pass

class WindowManager(ScreenManager):
    pass

class TicTacToeApp(MDApp):
    def __init__(self, **kwargs):
        self.title = "TicTacToe Online"
        super().__init__(**kwargs)

    def build(self):
        TicTacToeApp.build.kv = Builder.load_file('styles\main.kv')
        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = "Gray"

        return TicTacToeApp.build.kv

    def join(self):
        TicTacToeApp.build.kv.current = 'join'
        

    def create(self):
        TicTacToeApp.build.kv.current = 'create'


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

這是main.kv文件:

#:kivy 2.0.0

WindowManager:
    OptionScreen:
        name: 'option'
    JoinServer:
        name: 'join'
    CreateServer:
        name: 'create'


<OptionScreen>:
    MDCard:
        size_hint: None, None
        size: 700, 500
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        spacing: 25
        padding: 25
        orientation: 'vertical'

        MDLabel:
            text: "Choose an option"
            font_size: "28"
            padding_y: 15
            size_hint_y: None
            halign: 'center'
            pos_hint: {'center_x': 0.5,'center_y':0.5}

        MDRoundFlatButton:
            text:"Join Server"
            font_size: 20
            pos_hint: {'center_x':0.5}
            on_press: app.join()

        MDRoundFlatButton:
            text:"Create Server"
            font_size: 20
            pos_hint: {'center_x':0.5}
            on_press: app.create()

        Widget:
            size_hint_y: None
            height: 90
            
<JoinServer>:
    MDCard:
        size_hint: None, None
        size: 700, 500
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        spacing: 25
        padding: 25
        orientation: 'vertical'

        MDLabel:
            text: "Join Server"
            font_size: "28"
            padding_y: 15
            size_hint_y: None
            halign: 'center'
            pos_hint: {'center_x': 0.5,'center_y':0.5}

        Widget:
            size_hint_y: None
            height: 325       

<CreateServer>:
    MDCard:
        size_hint: None, None
        size: 700, 500
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        spacing: 25
        padding: 25
        orientation: 'vertical'

        MDLabel:
            text: "Create Server"
            font_size: 40
            padding_y: 15
            size_hint_y: None
            halign: 'center'
            pos_hint: {'center_x': 0.5,'center_y':0.5}

        MDLabel:
            text: "Server Address: "
            id: address
            font_size: 18
            size_hint_y: None
            halign: 'center'
            pos_hint: {'center_x': 0.5,'center_y':0.5}

        MDTextField:
            mode: 'round'
            id: passw
            hint_text: "Password"
            size_hint_x: None
            width: 150
            font_size: 18
            pos_hint: {'center_x': 0.5}
            

        MDRoundFlatButton:
            text:"Create Server"
            font_size: 20
            pos_hint: {'center_x': 0.5}
            on_press: app.create_s()

        Widget:
            size_hint_y: None
            height: 20

我想在切換到CreateServer屏幕后立即將CreateServer屏幕中帶有 id address的 label 的文本更改為其他內容。

我也想知道如何在kivy一切換屏幕就執行一段代碼。

要在CreateServer屏幕中使用 id address更改 label,只需將 go 更改為CreateServer class 並執行以下更改。

class CreateServer(Screen):
    def on_enter(self, *args):
        self.manager.get_screen("create").ids.address.text = "your new text value"

並在您切換屏幕時執行代碼。 使用上面答案中使用的on_enter function 。 一旦屏幕激活,就會觸發on_enter function。 我希望它回答了你的問題。

暫無
暫無

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

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