[英]Python kivy. Something wrong with collide_widget or not?
我正在尝试使用collide_widget方法根据kivy中小部件的位置打印不同的数字。 但是,不是根据if子句打印1或0,而是同时得到1和0,但我不明白为什么。 我不知道我哪里错了。 如果有人向我解释这一点会很好。
这是我的代码。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivy.properties import StringProperty, ObjectProperty
Builder.load_string('''
<Sample@Image>:
size: self.size
allow_stretch: False
keep_ratio: False
do_rotation: False
<PutOnShelfScreen1>:
canvas:
Rectangle:
source: 'image.png'
size: self.size
pos: self.pos
BoxLayout:
orientation: 'horizontal'
spacing: 30
padding: [10, 150, 10, 10]
Button:
id: Tools
background_color: [63, 191, 63, 0.3]
text: ''
Button:
id: Transportation
background_color: [63, 191, 63, 0.3]
text: ''
Button:
id: Furniture
background_color: [63, 191, 63, 0.3]
text: ''
StencilView:
id: elka
Scatter:
pos: 500, 500
size: my_image1.size
Image:
id: my_image1
source: 'block_1\\ель.png'
StencilView:
id: armchair
Scatter:
pos: 500, 500
size: my_image2.size
Image:
id: my_image2
source: 'block_1\\armchair.png'
on_touch_up: root.Count(Furniture, Tools, Transportation, armchair)
''')
class PutOnShelfScreen1(Screen):
Tools = Widget()
Transportation = Widget()
Furniture = Widget()
armchair = Widget()
def Count(self, Furniture, Tools, Transportation, armchair):
if armchair.collide_widget(Furniture) is True:
print("1")
if armchair.collide_widget(Tools) or armchair.collide_widget(Transportation) is True:
print("0")
sm = ScreenManager()
sm.add_widget(PutOnShelfScreen1(name='class'))
class SampleApp(App):
def build(self):
return (sm)
if __name__ == "__main__":
SampleApp().run()
您已将kv和python代码绑定在一起,但未正确使用该连接。 请阅读小部件文档中的ids
部分。
在您的代码中,对PutOnShelfScreen1(name='class')
的调用将创建一个具有指定ids
的对象。 如果您获得对该对象的引用,例如:
sm = ScreenManager()
poss1 = PutOnShelfScreen1(name='class')
sm.add_widget(poss1)
然后,您可以使用poss1
访问您感兴趣的那些小部件:
Tools = poss1.ids['Tools']
Transportation = poss1.ids['Transportation']
Furniture = poss1.ids['Furniture']
armchair = poss1.ids['armchair']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.