簡體   English   中英

我想將文本字段 in.kv 文件中的文本加載到變量 in.py 文件中

[英]I want to load text from text field in .kv file to a variable in .py file

我希望能夠單擊顯示 Štart 的 MDFlatButton,我希望它以調用 get_user_input(self) 為例,它將打印文本字段內的任何內容。 我已經為此苦苦掙扎了整整 2 天,我不知道該怎么做,我只是一個初學者,我不知道我在做什么,如果它很亂,我很抱歉。 求助,這些是我的文件:main.py 文件:


from kivy.core.window import Window
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.textfield import MDTextField
from kivy.properties import StringProperty

class testy(Screen):
    novy_test = ObjectProperty()


class Test(MDApp):

    Window.size = (1170 / 3, 2532 / 3)
    # input_number = ObjectProperty()
    def build(self):
        self.theme_cls.material_style = "M3"
        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = 'Gray'


        return testy()
    def get_user_input(self):
        print(self.root.ids.my_textfield_1.ids.user.text)
    def callback(self, button):
        pass



class CustomOverFlowMenu(MDDropdownMenu):
    # In this class you can set custom properties for the overflow menu.
    pass

Test().run()


測試.kv 文件:

#:import Factory kivy.factory.Factory

#:import CustomOverFlowMenu __main__.CustomOverFlowMenu

<testy>:
    name:'testy'
    id: testy
    MDBoxLayout:
        orientation: "vertical"

        MDTopAppBar:
            title: "MDTopAppBar"
            use_overflow: True
            overflow_cls: CustomOverFlowMenu()
            specific_text_color: .51,.51,.51,1
            md_bg_color: 0, 0, 0, 1



            left_action_items: [["car", lambda x: Factory.novy_test().open(), '',"Nový test"]]


        MDBottomNavigation:
            panel_color: "black"
            selected_color_background: "white"
            text_color_active: "lightgray"
            selected_color_background: 1, 1, 1, .4

            MDBottomNavigationItem:
                name: 'screen 1'
                text: 'Testy'
                icon: 'road-variant'

                MDLabel:
                    text: 'Test'
                    halign: 'center'


            MDBottomNavigationItem:
                name: 'screen 2'
                text: 'chyby'
                icon: 'alert-circle'


                MDLabel:
                    text: 'Chyby'
                    halign: 'center'

            MDBottomNavigationItem:
                name: 'screen 3'
                text: 'Settings'
                icon: 'cog'

                MDLabel:
                    text: 'LinkedIN'
                    halign: 'center'
<novy_test@Popup>:
    id:my_textfield_1
    size_hint: .8, .45
    title: 'Nový test'
    separator_color: 'black'

    title_align: 'center'
    BoxLayout:
        id: layout

        spacing: 10
        orientation:'vertical'

        MDTextField:
            id: user
            hint_text: "Číslo testu"
            mode: "round"
            pos_hint: {"top": 1}

        MDFlatButton:
            text: 'Štart'
            pos_hint: {'center_x': .5}
            on_press: app.get_user_input()


        MDFlatButton:
            pos_hint: {'center_x': .5}
            text:'test z nesprávnych'
        MDFlatButton:
            text:'test z neurobených'
            pos_hint: {'center_x': .5}
        MDFlatButton:
            text:'test z neurobených'
            pos_hint: {'center_x': .5}
        MDFlatButton:
            text:'test z neurobených'
            pos_hint: {'center_x': .5}


我並不完全理解您想做的所有事情,但在這個例子中,將打印一個人在框中鍵入的文本。 為了方便創建單文件可運行項目,我將 .kv 語言移動到一個字符串中。 我測試了它。

重點是這段代碼,在 .kv 文件/kivy 語言中,你可以使用 id 屬性來獲取對對象的引用,然后將 object 的 .text 屬性作為參數發送給 function。

on_press: app.get_user_input(user.text)

可運行:

from kivy.core.window import Window
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.menu import MDDropdownMenu
from kivy.uix.popup import Popup
from kivymd.uix.textfield import MDTextField
from kivy.properties import StringProperty

Builder.load_string('''
#:import Factory kivy.factory.Factory

<testy>:
    name:'testy'
    id: testy
    MDBoxLayout:
        orientation: "vertical"
        MDTopAppBar:
            title: "MDTopAppBar"
            use_overflow: True
            # overflow_cls: CustomOverFlowMenu()
            specific_text_color: .51,.51,.51,1
            md_bg_color: 0, 0, 0, 1
            left_action_items: [["car", lambda x: Factory.NovyTest().open(), '',"Nový test"]]
        MDBottomNavigation:
            panel_color: "black"
            selected_color_background: "white"
            text_color_active: "lightgray"
            selected_color_background: 1, 1, 1, .4
            MDBottomNavigationItem:
                name: 'screen 1'
                text: 'Testy'
                icon: 'road-variant'
                MDLabel:
                    text: 'Test'
                    halign: 'center'
            MDBottomNavigationItem:
                name: 'screen 2'
                text: 'chyby'
                icon: 'alert-circle'
                MDLabel:
                    text: 'Chyby'
                    halign: 'center'
            MDBottomNavigationItem:
                name: 'screen 3'
                text: 'Settings'
                icon: 'cog'
                MDLabel:
                    text: 'LinkedIN'
                    halign: 'center'
<NovyTest@Popup>:
    id:my_textfield_1
    size_hint: .8, .45
    title: 'Nový test'
    separator_color: 'black'
    title_align: 'center'
    BoxLayout:
        id: layout
        spacing: 10
        orientation:'vertical'
        MDTextField:
            id: user
            hint_text: "Číslo testu"
            mode: "round"
            pos_hint: {"top": 1}
        MDFlatButton:
            text: 'Štart'
            pos_hint: {'center_x': .5}
            # inside .kv/kivy language you can use the id property
            on_press: app.get_user_input(user.text)
        MDFlatButton:
            pos_hint: {'center_x': .5}
            text:'test z nesprávnych'
        MDFlatButton:
            text:'test z neurobených'
            pos_hint: {'center_x': .5}
        MDFlatButton:
            text:'test z neurobených'
            pos_hint: {'center_x': .5}
        MDFlatButton:
            text:'test z neurobených'
            pos_hint: {'center_x': .5}
'''
)


class NovyTest(Popup):
    # just an example, not used in this code
    def __init__(self, **kw):
        super().__init__(**kw)


class testy(Screen):
    # can list objects defined in .kv file and give them a type hint corresponding to object type
    novy_test: NovyTest

    def __init__(self, **kw):
        super().__init__(**kw)
        print("creating screen testy")

    # novy_test = ObjectProperty()


class Test(MDApp):

    Window.size = (1170 / 3, 2532 / 3)
    # input_number = ObjectProperty()

    def build(self) -> testy:
        self.theme_cls.material_style = "M3"
        self.theme_cls.theme_style = "Dark"
        self.theme_cls.primary_palette = 'Gray'
        return testy()

    def get_user_input(self, input_text, *args):
        print(f"{self} user input: {input_text}")
        # print(self.root.ids.my_textfield_1.ids.user.text)

    def callback(self, button):
        pass


class CustomOverFlowMenu(MDDropdownMenu):
    # In this class you can set custom properties for the overflow menu.
    pass


Test().run()

結尾

暫無
暫無

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

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