画布的意外行为

时间:2019-09-09 10:26:02

标签: python kivy

例如,我有一些代码。包含两个按钮。我为btn绑定了on_press事件,并且在单击时尝试更改其Scale。但是实际上,此代码以某种方式更改了btn1的大小,而不是btn。我不知道为什么

class TutorialApp(App):

    scale = 1
    def btn_click(self, elem):

        if self.scale < 0.2: return

        sc = Scale()
        sc.xyz = (0.8,0.8,1)
        self.scale *= 0.8
        print self.scale
        elem.canvas.add(sc) #after и canvas has same behavior, but before changes scales of both buttons/ I don't know why


    def build(self):
        bl = Layout(text='APP')
        bl.orientation = 'vertical'
        btn = Button(text='OK', size_hint=(1,0.5))
        btn1 = Button(text='OK1', size_hint=(1,0.5))

        btn.bind(on_press = self.btn_click)

        bl.add_widget(btn) #,pos=(100,100)
        bl.add_widget(btn1) #,pos=(100,100)

        return bl

我尝试使用afterbefore,通过elem.canvas.after的行为与不使用它们的情况相同,通过before,我得到了两个按钮的大小更改。为什么会这样?

1 个答案:

答案 0 :(得分:0)

elem.canvas.add(sc)Scale附加到btn的指令列表中。因此,它不会影响btn的绘制,但会影响btn1的绘制(因为它是在btn之后绘制的)。使用canvas.beforeScale插入到btn图形之前,因此会同时影响两者。显然,使用canvas.after与原始版本具有相同的效果。