Python 动态访问Kivy文本值
我找不到一个简单问题的答案。我试图在按下按钮时使其显示自己的文本值。例如,当我按下“项目1”时,它应该打印出“项目1”等等。现在我可以理解地打印出“第3项”,因为这是最后一个循环,但有没有办法改变行为。请协助:Python 动态访问Kivy文本值,python,kivy,Python,Kivy,我找不到一个简单问题的答案。我试图在按下按钮时使其显示自己的文本值。例如,当我按下“项目1”时,它应该打印出“项目1”等等。现在我可以理解地打印出“第3项”,因为这是最后一个循环,但有没有办法改变行为。请协助: from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button class test(BoxLayout): orientation =
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class test(BoxLayout):
orientation = 'vertical'
def __init__(self, **kwargs):
super(test, self).__init__(**kwargs)
def reload(self, instance):
print(button.text)
myList = ['item 1', 'item 2', 'item 3']
t = 0
for x in myList:
button = Button(text=myList[t], on_press=lambda instance: reload(button.text, instance))
self.add_widget(button)
t += 1
class MyApp(App):
def build(self):
return test()
if __name__ == '__main__':
MyApp().run()
你可以像我下面做的那样使用lambda
Button(text=myList[t], on_press=lambda a: print(a.text))
全部代码
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class test(BoxLayout):
orientation = 'vertical'
def __init__(self, **kwargs):
super(test, self).__init__(**kwargs)
myList = ['item 1', 'item 2', 'item 3']
for item in myList:
button = Button(text=item, on_press=lambda a: print(a.text))
self.add_widget(button)
class MyApp(App):
def build(self):
return test()
if __name__ == '__main__':
MyApp().run()
此外,我使用enumerate更改了for循环,使其更符合python约定。您可以使用lambda,如下所示
Button(text=myList[t], on_press=lambda a: print(a.text))
全部代码
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class test(BoxLayout):
orientation = 'vertical'
def __init__(self, **kwargs):
super(test, self).__init__(**kwargs)
myList = ['item 1', 'item 2', 'item 3']
for item in myList:
button = Button(text=item, on_press=lambda a: print(a.text))
self.add_widget(button)
class MyApp(App):
def build(self):
return test()
if __name__ == '__main__':
MyApp().run()
此外,我使用enumerate更改了for循环,使其更符合python约定。您总是打印“Item 3”,因为您的重载方法总是引用最后创建的按钮。要更正此问题,需要将“按钮.text”替换为“实例.text”,如下面的代码段所示。有关详细信息,请参考下面的示例(不使用lambda)
一小条
替换:
def reload(self, instance):
print(button.text)
与:
输出-您的程序
示例-不带lambda
main.py
输出-示例
您总是打印“项目3”,因为您的重新加载方法总是引用上次创建的按钮。要更正此问题,需要将“按钮.text”替换为“实例.text”,如下面的代码段所示。有关详细信息,请参考下面的示例(不使用lambda)
一小条
替换:
def reload(self, instance):
print(button.text)
与:
输出-您的程序
示例-不带lambda
main.py
输出-示例
它可以工作,但这是一个相当复杂的方法,因为我需要在“test”类中使用文本值,但我无法获取,很抱歉,我是kivy的新手。这是唯一的方法吗?不是,我认为我的更新答案提供了一个更好的解决方案。它有效,但这是一个相当复杂的方法,因为我需要在我的“测试”类中使用文本值,我无法获得,抱歉,我是kivy的新手。这是唯一的方法吗?不是,我认为我的更新答案提供了一个更好的解决方案。谢谢两个答案都很好,我将只添加第一个作为答案,然后向上投票另一个谢谢两个答案都很好,我将只添加第一个作为答案,然后向上投票另一个