簡體   English   中英

我總是得到相同的(最后添加的)值,試圖獲得 kivy 的按鈕文本,使用 python 3

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM