Python Kivy将数据从一个屏幕传递到另一个屏幕,并直接传递到另一个类
我是Kivy的新手,我正在试用我的第一个应用程序。我正在努力解决类之间的数据直接交换问题。我已经尝试了一些实施建议,这里已经提到了。不幸的是没有成功。 我想直接访问其他类中的“TextInput”,将文本分配给变量(值),并将其打印到命令行。 我显然错了,但是像这样的模式不应该工作吗:app.screenmanager.screen.textinput.text? 我最后一次尝试的是类似这样的东西:App.get\u running\u App().root.ids.sm.get\u screen('settingscreen').ids.id\u textinp 触发器中的错误是:'super'对象没有属性'getattr' 主屏幕中的错误为:“非类型”对象没有属性“根” 问题:Python Kivy将数据从一个屏幕传递到另一个屏幕,并直接传递到另一个类,python,kivy,Python,Kivy,我是Kivy的新手,我正在试用我的第一个应用程序。我正在努力解决类之间的数据直接交换问题。我已经尝试了一些实施建议,这里已经提到了。不幸的是没有成功。 我想直接访问其他类中的“TextInput”,将文本分配给变量(值),并将其打印到命令行。 我显然错了,但是像这样的模式不应该工作吗:app.screenmanager.screen.textinput.text? 我最后一次尝试的是类似这样的东西:App.get\u running\u App().root.ids.sm.get\u scree
import kivy
kivy.require('1.11.1')
from kivy.app import App
from kivy.uix.label import Label
from kivy.core.window import Window
from kivy.clock import Clock
from kivy.uix.button import Button
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.textinput import TextInput
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import Image
from kivy.uix.slider import Slider
from kivy.clock import Clock
from kivy.graphics import Color, Rectangle
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.properties import StringProperty
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from functools import partial
import requests
import time
class Trigger:
def compare(callbacktime,test2, test3):
value="Trigger: nothing in here"
#value = App.get_running_app().root.ids.sm.get_screen('settingscreen').ids.id_textinp
print (value)
pass
class MainScreen(Screen):
def __init__(self, **kwargs):
super(MainScreen, self).__init__(**kwargs)
self.alert=Trigger
paraDict={'test2':"222",'test3':"333"}
value="MainScreen: nothing in here"
#value = App.get_running_app().root.ids.sm.get_screen('settingscreen').ids.id_textinp
print (value)
Clock.schedule_interval(partial(self.alert.compare,**paraDict), 1)
self.btn2 = Button(text='Settings', size_hint=(.15, .1), pos_hint={'center_x': .9, 'center_y': .95})
self.add_widget(self.btn2)
self.btn2.bind(on_press = self.screen_transition_alarm)
def screen_transition_alarm(self, *args):
self.manager.current = 'settingscreen'
class SettingScreen(Screen):
def __init__(self, **kwargs):
super(SettingScreen, self).__init__(**kwargs)
self.add_widget(Label(text='Hi Im The SettingScreen', size_hint=(.45, .1), pos_hint={'x': .05, 'y': .9}))
self.btn = Button(text='back', size_hint=(.15, .1), pos_hint={'center_x': .9, 'center_y': .95})
self.add_widget(self.btn)
self.btn.bind(on_press = self.screen_transition_back)
self.hour = TextInput(id='id_textinp', text='1337', size_hint=(.3, .3), pos_hint={'center_x': .3, 'center_y': .7},input_filter="int",multiline=False, font_size=30, halign="center")
self.add_widget(self.hour)
def screen_transition_back(self, *args):
self.manager.current = 'mainscreen'
sm = ScreenManager(transition=FadeTransition())
sm.add_widget(MainScreen(name='mainscreen',id='id_mainscreen'))
sm.add_widget(SettingScreen(name='settingscreen', id='id_settingscreen'))
class MainApp(App):
title = 'mainprogram'
def build(self):
return sm #return Screenmanager
if __name__ == '__main__':
MainApp().run()
在python代码中添加
ids
不会将它们放入任何ids
字典中。这必须在kv
中完成。尝试类似App.get\u running\u App()的操作。root.get\u screen('settingscreen')。hour
感谢您的回答。我认为在kv中完成的所有工作都可以在python代码中完成。App.get\u running\u App()中完成.root.get_screen('settingscreen').hour在触发器类中工作!它返回TextInput的对象。在App.get_运行的情况下,\u App().root.get_screen('settingscreen').hour.text我终于得到了TextInput的文本。谢谢!