Python 从另一个类中的InputText获取值。基维

Python 从另一个类中的InputText获取值。基维,python,python-3.x,kivy,Python,Python 3.x,Kivy,我试图从InputText传递一个值,如下所示。但我总是得到一个空字符串。如果我写InputText(text='test'),那么test这个词总是被传输,而不是我输入的内容。如何在UserAcount类中获取我输入的InputText() 请告诉我我错过了什么。提前谢谢好的。 我发现,你只在开始时传递用户名,因此它在将来不会改变。 此代码应适用于: 从kivy.app导入应用 从kivy.uix.button导入按钮 从kivy.uix.widget导入widget 从kivy.uix.la

我试图从
InputText
传递一个值,如下所示。但我总是得到一个空字符串。如果我写
InputText(text='test')
,那么test这个词总是被传输,而不是我输入的内容。如何在
UserAcount
类中获取我输入的
InputText()

请告诉我我错过了什么。提前谢谢

好的。 我发现,你只在开始时传递用户名,因此它在将来不会改变。 此代码应适用于:

从kivy.app导入应用
从kivy.uix.button导入按钮
从kivy.uix.widget导入widget
从kivy.uix.label导入标签
从kivy.uix.gridlayout导入gridlayout
从kivy.uix.boxlayout导入boxlayout
从kivy.uix.textinput导入textinput
从kivy.uix.screenmanager导入screenmanager,屏幕
从kivy.metrics导入dp
导入sqlite3
conn=sqlite3.connect('diplom.sqlite',check\u same\u thread=False)
类入口菜单(屏幕):
定义初始值(self,myapp,**kw):
超级(入口菜单,自我)。\uuuuu初始功率(**kw)
长方体=长方体布局(填充=150,方向=垂直)
self.myapp=myapp
self.login=TextInput(text='',multiline=False)
box.add_小部件(self.login)
self.password=TextInput(text='',multiline=False)
box.add_小部件(self.password)
self.error=标签(text=”“)
box.add\u小部件(self.error)
box.add_小部件(按钮(text='Entry',on_press=self.buttonClicked))
self.add_小部件(框)
def按钮已锁定(自身,btn):
self.error.text=''
康涅狄格州:
游标=连接游标()
sql=f'''选择用户名、密码
来自用户
其中username='{self.login.text}';
'''
cursor.execute(sql)
结果=cursor.fetchall()
如果结果是:
如果self.password.text==结果[0][1]:
self.myapp.set\u屏幕('user\u acount',self.login.text)
elif self.password.text=结果[0][1]:
self.error.text=“错误密码”
其他:
self.error.text=“无法搜索用户”
类用户帐户(屏幕):
定义初始化(自我、登录、myapp,**kw):
超级(用户帐户,自我)。\uuuu初始值(**kw)
长方体=长方体布局(方向=垂直)
self.myapp=myapp
self.login=login
名称=标签(文本=self.login)
box.add_小部件(名称)
后退按钮=按钮(text='Exit',打开按钮=λx:
myapp.set_屏幕(“菜单”),大小提示(y=None,高度=dp(40))
添加小部件(后退按钮)
self.add_小部件(框)
类别MyApp(应用程序):
def uuu init uuuu(self,**kvargs):
超级(MyApp,self)。\uuuuuu初始化(**kvargs)
self.sm=ScreenManager()
self.username=“”
self.userAcount=userAcount(self.username,name='user\u acount',myapp=self)
self.sm.add\u小部件(self.userAcount)
self.entryMenu=entryMenu(name='menu',myapp=self)
self.sm.add_小部件(self.entryMenu)
自我设置屏幕(“菜单”)
def生成(自):
返回self.sm
def设置屏幕(自我,名称屏幕,用户名=无):
如果用户名!=无且名称屏幕==“用户帐户”:
self.username=用户名
self.sm.remove\u小部件(self.userAcount)
self.userAcount=userAcount(self.username,name='user\u acount',myapp=self)
self.userAcount.login=self.username
self.sm.add\u小部件(self.userAcount)
self.sm.current=name\u屏幕
如果名称=“\uuuuu main\uuuuuuuu”:
MyApp().run()

你能澄清你的问题吗?文本
InputText
没有出现在您的示例中。@恶劣。对在第一类
EntryMenu
self.login`中,我输入我的登录名。我想在第二个
UserAcount
中看到他,你能在这里发布你的完整代码吗?@Yuval.R我是更新问题。数据库中只有一个包含id登录和密码的表。我的代码为您工作了吗?将来不会更改,是的。代码从一个片段开始工作。当更改用户时,登录名不会更改。您是正确的,我已经更新了代码,现在可以使用了吗?将能够在20小时内为这个答案提供与我所说的相同的早期奖励。对这个答案给予了奖励。再次感谢!
from kivy.app import App 
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.metrics import dp

import sqlite3

conn = sqlite3.connect('diplom.sqlite', check_same_thread = False)


class EntryMenu(Screen):

    def __init__(self, **kw):
        super(EntryMenu, self).__init__(**kw)
        box = BoxLayout(padding=150,orientation='vertical')
        self.login = TextInput(text='', multiline=False)
        box.add_widget(self.login)
        self.password = TextInput(text='', multiline=False)
        box.add_widget(self.password)
        self.error = Label(text="")
        box.add_widget(self.error)
        box.add_widget(Button(text='Entry', on_press=self.buttonClicked))
        self.add_widget(box)

    def buttonClicked(self,btn):
        self.error.text=''
        with conn:
            cursor = conn.cursor()
            sql =f'''SELECT username,password
            FROM user
            WHERE username = '{self.login.text}';
            '''
            cursor.execute(sql)
            results = cursor.fetchall()
            if results:
                if self.password.text==results[0][1]:
                    set_screen('user_acount')
                elif self.password.text!=results[0][1]:
                    self.error.text = "error password"
            else:
                self.error.text = "can not search user"



class UserAcount(Screen):
    def __init__(self,login, **kw):
        super(UserAcount, self).__init__(**kw)
        box = BoxLayout(orientation='vertical')
        self.login=login
        name = Label(text=self.login)
        box.add_widget(name)
        back_button = Button(text='Exit', on_press=lambda x:
                             set_screen('menu'), size_hint_y=None, height=dp(40))   
        box.add_widget(back_button)
        self.add_widget(box)


def set_screen(name_screen):
    sm.current = name_screen


sm = ScreenManager()
sm.add_widget(EntryMenu(name='menu'))
sm.add_widget(UserAcount(EntryMenu().login.text,name='user_acount'))

class MyApp(App):
    def __init__(self, **kvargs):
        super(MyApp, self).__init__(**kvargs)

    def build(self):
        return sm


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