在 Kivy 1.10 和 Python 2.7.9 中使用 ScreenManager 获取 TextInput 值

Posted

技术标签:

【中文标题】在 Kivy 1.10 和 Python 2.7.9 中使用 ScreenManager 获取 TextInput 值【英文标题】:Getting TextInput value with ScreenManager in Kivy 1.10 and Python 2.7.9 【发布时间】:2018-08-27 10:36:17 【问题描述】:

在 Python 2.7.9 中使用 Kivy 1.10.0 我试图在单击 Button (my_button2) 时获取用户输入的 TextInput 值。虽然我已经能够使用 GridLayout 来实现它,但它似乎是我的方法我正在使用的不是带有 BoxLayout 的 ScreenManager 。收到的错误是:AttributeError: 'ScreenTwo' object has no attribute 'inpt' when my_button2

点击“下一个屏幕”按钮后,它会将我带到用户输入文本值的页面,“打印”按钮应该打印它

请看下面:

import kivy
from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager 
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput

class ScreenOne(Screen):

    def __init__ (self,**kwargs):

        super (ScreenOne, self).__init__(**kwargs)
        my_box1 = BoxLayout(orientation='vertical')
        my_button1 = Button(text="Next Screen ",size_hint_y=None,size_y=100)
        my_button1.bind(on_press=self.changer)     
        my_box1.add_widget(my_button1) 
        self.add_widget(my_box1)

    def changer(self,*args):
        self.manager.current = 'screen2'

class ScreenTwo(Screen):

    def __init__(self,**kwargs):
        super (ScreenTwo,self).__init__(**kwargs)


        layout = BoxLayout(orientation='vertical')       
        self.add_widget(layout)
        inpt = TextInput(text="Some text ",size_y=50)       
        layout.add_widget(inpt)

        my_button2 = Button(text="Print ")      
        my_button2.bind(on_press=self.click)      
        layout.add_widget(my_button2)

        Home_btn = Button(text="Back")                      
        Home_btn.bind(on_press=self.home)
        layout.add_widget(Home_btn)

    def click(self,my_button2):

        entered_value = self.inpt.text
        print entered_value


    def home(self,*args):
        self.manager.current = 'screen1'


class TestApp(App):

        def build(self):
            my_screenmanager = ScreenManager()
            screen1 = ScreenOne(name='screen1')
            screen2 = ScreenTwo(name='screen2')
            my_screenmanager.add_widget(screen1)
            my_screenmanager.add_widget(screen2)       
            return my_screenmanager

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

第二屏

【问题讨论】:

【参考方案1】:

当您使用 self 时,您正在尝试访问该类的成员,但在您的情况下 inpt 它不是,因为它是任何变量,如果您想成为该类的成员,您必须在您的大小写变化:

inpt = TextInput(text="Some text ",size_y=50)       
layout.add_widget(inpt)

到:

self.inpt = TextInput(text="Some text ",size_y=50)       
layout.add_widget(self.inpt)

注意:如果您不会遇到很多这些问题,我建议您阅读 OOP 基础知识。

【讨论】:

我会这样做的。谢谢!!

以上是关于在 Kivy 1.10 和 Python 2.7.9 中使用 ScreenManager 获取 TextInput 值的主要内容,如果未能解决你的问题,请参考以下文章

如何让 kivy 在 OS X 上使用特定版本的 python?

Kivy-ios Xcode 构建错误

Django 1.10文档中文版Part3

如何使 APK 在 WINDOWS 上独立于 Kivy 和 python?

Kivy 和 Python 线程 - 如何在它们之间获取数据

如何在 Ubuntu 中将 kivy 和 python 打包成可执行文件?