如何使用第二个屏幕从kivy中的文本字段中提取文本?

2024-09-30 18:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始学习python和kivy,出于某种原因,我一直在学习

AttributeError: 'super' object has no attribute '__getattr__

目前,我的代码只是为了测试这一点,我知道还有其他类似的帖子存在,但我遵循了他们正在做的事情来修复它,我不断得到相同的错误

这部分是文本。py

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

Builder.load_file('text.kv')


# Declare both screens
class MenuScreen(Screen):
    pass


class WritingScreen(Screen):
    pass


# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(WritingScreen(name='Write'))
screens = [Screen(name='Title {}'.format(i)) for i in range(2)]




class TestApp(App):

    def build(self):
        return sm

    def write(self):
        sm.current = 'Write'

    def process(self):
        text = self.root.ids.input.text
        print("Hello")


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

这是我的Text.kv文件

<MenuScreen>:
    FloatLayout:
        Button:
            text: 'Write'
            on_press: app.write()
            size_hint: .3, .2
            background_color: 1, 2, 1, 1
            pos_hint: {'x': .35, 'y': .4}
<WritingScreen>:
    FloatLayout:
        TextInput:
            id: input
            hint_text: "Ello There... Yaren't supposed to be here yet..."
            size_hint: .8, .1
            pos_hint: {'x':0, 'y': 0.9}
        Button:
            text: 'print'
            on_press: app.process()
            size_hint: .2, .1
            pos_hint: {'x':.8, 'y': .8}
        Button:
            text: 'Back to menu'
            on_press: root.manager.current = 'menu'
            size_hint: .2, .1
            pos_hint: {'x':.8, 'y': .9}

再次,如果这是一个重复的问题,我很抱歉,但我尝试过的每一篇文章都不适合我。谢谢你的帮助,我还是一个初学者,希望你能给我一些建议!)


Tags: textnamefromposimportselfappsize
1条回答
网友
1楼 · 发布于 2024-09-30 18:30:47

您在process()方法中的行:

text = self.root.ids.input.text

正在尝试使用input{},就好像它在root(即ScreenManager)的ids中一样,但是ids字典是在kv规则的根中定义的。所以input{}在WritingScreenids中。要访问WritingScreenids,您可以将该行代码更改为如下内容:

text = self.root.get_screen('Write').ids.input.text

相关问题 更多 >