首页 > 解决方案 > 画布的意外行为

问题描述

例如,我有一些代码。它包含两个按钮。我已经为 btn 绑定了 on_press 事件,并在单击时尝试更改其比例。但实际上这段代码以某种方式改变了 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

我尝试使用afteror before,并且elem.canvas.after行为与没有它们时相同,因此before我可以更改两个按钮的大小。为什么会这样?

标签: pythonkivy

解决方案


elem.canvas.add(sc)附加Scale到 的指令列表中btn。所以它不影响 的绘制btn,但确实影响 的绘制btn1(因为它是在 之后绘制的btn)。使用在绘图之前canvas.before插入,因此它会影响两者。显然,使用和原来的效果是一样的。Scalebtncanvas.after


推荐阅读