例如,我有一些代码。包含两个按钮。我为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
我尝试使用after
或before
,通过elem.canvas.after
的行为与不使用它们的情况相同,通过before
,我得到了两个按钮的大小更改。为什么会这样?
答案 0 :(得分:0)
elem.canvas.add(sc)
将Scale
附加到btn
的指令列表中。因此,它不会影响btn
的绘制,但会影响btn1
的绘制(因为它是在btn
之后绘制的)。使用canvas.before
将Scale
插入到btn
图形之前,因此会同时影响两者。显然,使用canvas.after
与原始版本具有相同的效果。