Kivy小部件比它应该更大

时间:2015-01-02 13:32:16

标签: python widget kivy

我试图通过自己的coockie-clicker制作,所以我创建了一个kivy小部件并宣布了一个coockie的图像作为它的一部分。 每次单击wiget时,计数器都会上升,并且数字会显示在标签上。 一切顺利,我在这里得到了堆叠溢出的帮助,但是现在我遇到了问题,那个广泛的是大的,所以即使我点击右上角,计数器上升,aldoug我没有点击在coockie上。 这是源代码:

from kivy.app import App
from kivy.lang import Builder

from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.core.window import Window

from kivy.clock import Clock
from kivy.animation import Animation
from  kivy.core.text.markup import *

from kivy.uix.floatlayout import FloatLayout
from kivy.properties import NumericProperty
from kivy.properties import StringProperty

Builder.load_string('''
<Root>:

    Kecks:
        pos: 300, 300
        size: 100, 100
<Kecks>:

    Image:
        pos: root.pos
        id: my_image
        source: root.weg

    Label:
        id: my_Label
        font_size: 50
        text: root.txt
        center_x: 345
        center_y: 200       
''')

class Root(FloatLayout):
    def __init__(self, *args, **kwargs):
        super(Root, self).__init__(*args, **kwargs)

class Kecks(Widget):

    count = NumericProperty(0)
    amount = NumericProperty(1)
    txt = StringProperty()
    level = NumericProperty(1)
    weg = StringProperty('piernik.png')

    def __init__(self, *args, **kwargs):
        super(Kecks, self).__init__(*args, **kwargs)
        #self.txt = str(self.count)
        Clock.schedule_interval(self.Update, 1/60.)

    def Update(self, *args):
        self.txt = str(self.count)
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            self.count += self.amount


class app(App):
    def build(self):
        Window.clearcolor = (10, 0, 0, 1)
        return Root()

if __name__ == "__main__":
    app().run()

1 个答案:

答案 0 :(得分:2)

问题是你没有在你想要触发该事件的区域上定义 collide_points

考虑您是否希望 my_image 上的 collide_points 触发 on_touch_down 事件,您需要像这样调整:

def on_touch_down(self, touch):
    # to check if touch.pos collides on my_image 
    if self.ids.my_image.collide_point(*touch.pos):
        self.count += self.amount

也许可以考虑使用pos_hintsize_hint,因为这些可以帮助您与在不同设备(例如屏幕大小)中运行的应用程序保持一致,而不是使用绝对大小和/或位置

希望这有帮助。