簡體   English   中英

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

[英]Getting TextInput value with ScreenManager in Kivy 1.10 and Python 2.7.9

在Python 2.7.9中使用Kivy 1.10.0和Python 2.7.9時,我試圖獲取用戶在單擊Button(my_button2)時輸入的TextInput值。盡管我已經能夠使用GridLayout進行此操作,但看來我正在使用的方法是無法與BoxManager一起使用ScreenManager。 收到的錯誤是:AttributeError:當my_button2時,“ ScreenTwo”對象沒有屬性“ inpt”

單擊“下一屏”按鈕后,將帶我到用戶輸入文本值的頁面,並且“打印”按鈕應將其打印出來

請看下面:

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()

第二屏

當您使用self時,您嘗試訪問該類的成員,但是在inpt中,它不是變量,因為它是任何變量,如果您想成為該類的成員,則必須提出self,在您的情況下進行更改:

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基礎知識。

暫無
暫無

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

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