python - 画布的意外行为
问题描述
例如,我有一些代码。它包含两个按钮。我已经为 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
我尝试使用after
or before
,并且elem.canvas.after
行为与没有它们时相同,因此before
我可以更改两个按钮的大小。为什么会这样?
解决方案
将elem.canvas.add(sc)
附加Scale
到 的指令列表中btn
。所以它不影响 的绘制btn
,但确实影响 的绘制btn1
(因为它是在 之后绘制的btn
)。使用在绘图之前canvas.before
插入,因此它会影响两者。显然,使用和原来的效果是一样的。Scale
btn
canvas.after
推荐阅读
- html - 移动 Safari 中的 SVG 渲染更小
- arrays - 将升序数组排序转换为降序 VBA
- python - TypeError:尝试调整图像大小时,“pygame.Surface”对象不可调用
- reactjs - 使用自定义 _document.js 的 componentDidMount 无法在 NextJS 上工作
- python - 如何在 python 中将 CT 分割转换为 3d 模型
- parsing - Rust - 如何在 nom 中解析 UTF-8 字母字符?
- python - Docker SDK for python中的auto_remove和remove有什么区别
- php - 输入数据成功但未将数据放入 php admin mySQL 数据库
- oauth-2.0 - 在 Microsoft Graph API 中,获得管理员同意的应用是否可以为与批准它的管理员不同的用户生成令牌?
- java - 不推荐使用新日期(年、月、日)