从 functools 导入部分
要访问外部方法中的文本输入,您可以使用部分函数或 lambda 函数。
self.ids
因为您没有 kv 文件,所以您得到 None 或空字典。
Note
当你的 kv 文件被解析时,kivy 会收集所有用 id 标记的小部件,并将它们放置在 self.ids 字典类型属性中。
详细请参考我下面的例子。
Example
main.py
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from functools import partial
class testclass:
def someth(*args, txt):
print(txt)
class BeginScreen(Screen):
def __init__(self, **kwargs):
super(BeginScreen, self).__init__(**kwargs)
layout = BoxLayout(orientation='vertical', padding=20, spacing=5)
layout.add_widget(Label(text=str('Hello')))
# layout.add_widget(TextInput(id='test', text='')) # id in python+kivy is deprecated
txtInput = TextInput(text='text input')
layout.add_widget(txtInput)
self.ids['test'] = txtInput
layout.add_widget(Button(text='Button!', on_press=partial(testclass.someth, txt=self.ids.test.text)))
self.add_widget(layout)
print("self.ids={}".format(self.ids))
print("self.ids['test']={}".format(self.ids['test']))
print("self.ids['test'].text={}".format(self.ids['test'].text))
print("self.ids.test.text={}".format(self.ids.test.text))
for key, val in self.ids.items():
print("key={0}, val={1}".format(key, val))
class TestApp(App):
from kivy.config import Config
Config.set('graphics', 'width', '800')
Config.set('graphics', 'height', '400')
def build(self):
sm = ScreenManager()
sm.add_widget(BeginScreen(name='test'))
return sm
TestApp().run()
Output
![Button Pressed](https://i.stack.imgur.com/Jt6b0.png)