Kivy,按一个按钮打开一个充满按钮的弹出窗口

时间:2014-05-05 15:09:47

标签: kivy

====>好的,感谢它与b.bind合作(on_press = partial(self.choix_avatar,chemin)) -
我必须更多地关注"可赎回的"功能......

有一些我不了解Kivy de事件的事情,有弹出事件。

使用kivy 1.8.0,我认为弹出窗口存在错误

我创建了一个原始按钮: on_press =>创建一个弹出窗口 在这个弹出窗口中,在许多按钮中有一个Stacklayout

当我按下原始按钮时,on_press会传播到StackLayout的按钮!!!!! 但我的弹出窗口不是原始按钮的子组件!所以为什么? 我不能'一旦初始化,我的按钮就会激活任何on_press ... 任何的想法 ?谢谢 ! R.T。

<。>在.kv和.py

<AvatarProfil>:
    orientation:'vertical'
    Button:
        size:(60,60)
        size_hint:(None,None)
        on_press:root.changer_avatar()
        background_normal:root.avatar
    Label:
        text:''
        font_size:14
        italic:True
        halign:'left'

class AvatarProfil(BoxLayout):
    auteur=StringProperty('')
    avatar=StringProperty('test/interrogation.png')

    def changer_avatar(self):
        panel=PanelAvatar(w_avatar=self)
        popup = Popup(title='Les Avatars à choisir',content=panel,size_hint=(None,None),size=(600,600))
        popup.open()

    def __init__(self, **kwargs):
        super(AvatarProfil, self).__init__(**kwargs)

class PanelAvatar(StackLayout):


    w_avatar=ObjectProperty(None)
    def __init__(self, **kwargs):
        self.spacing=(5,5)
        super(PanelAvatar, self).__init__(**kwargs)

        self.lavatars=[]
        self.w_avatar=kwargs['w_avatar']
        for root, dirs, files in os.walk('test/avatars resized', topdown=False):
                for name in files: 
                    chemin='test/avatars resized/'+name
                    b=Button(background_normal=chemin,on_press=self.choix_avatar(chemin),size_hint=(None,None))
                    self.add_widget(b)
    def choix_avatar(self,file):

        print ('choix de )%s'%(file))
        self.w_avatar.avatar=file

这是打印日志:(没有任何手动按钮按!!!)

choix de )test/avatars resized/avatar (1).jpg
choix de )test/avatars resized/avatar (1).png
choix de )test/avatars resized/avatar (10).jpg
choix de )test/avatars resized/avatar (11).jpg
choix de )test/avatars resized/avatar (12).jpg
choix de )test/avatars resized/avatar (13).jpg
choix de )test/avatars resized/avatar (14).jpg
choix de )test/avatars resized/avatar (15).jpg
choix de )test/avatars resized/avatar (16).jpg
choix de )test/avatars resized/avatar (17).jpg
choix de )test/avatars resized/avatar (18).jpg
choix de )test/avatars resized/avatar (19).jpg
choix de )test/avatars resized/avatar (2).jpg
choix de )test/avatars resized/avatar (2).png
choix de )test/avatars resized/avatar (20).jpg
choix de )test/avatars resized/avatar (21).jpg
choix de )test/avatars resized/avatar (22).jpg
choix de )test/avatars resized/avatar (23).jpg
choix de )test/avatars resized/avatar (24).jpg
choix de )test/avatars resized/avatar (25).jpg
choix de )test/avatars resized/avatar (3).jpg
choix de )test/avatars resized/avatar (3).png
choix de )test/avatars resized/avatar (4).jpg
choix de )test/avatars resized/avatar (5).jpg
choix de )test/avatars resized/avatar (6).jpg
choix de )test/avatars resized/avatar (7).jpg
choix de )test/avatars resized/avatar (8).jpg
choix de )test/avatars resized/avatar (9).jpg

1 个答案:

答案 0 :(得分:1)

在这里,当你想要绑定它时,你正在调用choix_avatar()

b=Button(background_normal=chemin,on_press=self.choix_avatar(chemin),size_hint=(None,None))

试试这个:

b=Button(background_normal=chemin, size_hint=(None,None))
b.bind(on_press=lambda *_: self.choix_avatar(chemin))