![](/img/trans.png)
[英]Python Get the Selected Radio Button's Text/label Name and not just the Value
[英]i always get same (last added) value, trying to get kivy's button's text, using python 3
我有一個 python3 腳本,在 Kivy 應用程序中,我用一些按鈕填充了 Boxlayout,使用 for 循環從列表中設置按鈕文本。 我想通過單擊每個按鈕獲得正確的按鈕文本,但我總是得到相同的文本。 最后一個。 我的小代碼:
dishes=['spaghetti','rice','fish','salad']
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
class app(App):
def build(self):
self.box=BoxLayout()
for dish in dishes:
self.box.add_widget(Button(text=dish,on_press=lambda *args:print(dish)))
return self.box
app().run()
通過這種方式,您可以為每個按鈕定義具有相同正文print(dish)
的匿名函數。 每次點擊都會評估 Function。 所以所有的按鈕都會執行print(dish)
,其中dish
是可變的。 無論您分配給這個變量的是什么,所有按鈕都會打印這個值。 在您的情況下,分配給變量dish
的最后一個值是'salad'
,這就是為什么所有按鈕都打印'salad'
的原因。 看起來可能很奇怪,但實際上變量dish
在 for 循環之外也是可用的。 Python for 循環結束時不銷毀該變量。 這是 Python 行為。
為了得到你需要的東西,我建議更換行:
self.box.add_widget(Button(text=dish,on_press=lambda *args:print(dish)))
和
self.box.add_widget(Button(text=dish,on_press=lambda self:print(self.text)))
所以每個 function 都會得到self
作為 function 參數( self
= Button 你剛剛點擊的實例),然后你就可以打印按鈕的文本屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.