0

kivyアコーディオンに画像をロードしていて、マウスボタンを押したときに画像の下にx座標とy座標を印刷したいです。私は一生これを理解することはできません。何かを追加するたびに、プログラム全体がシャットダウンするようです。私が持っているウィジェットがコンソールに出力されることはわかっていますが、それを画面に出力したいと考えています。

私が使用しているコードは次のとおりです。

from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.image import Image
from kivy.app import App
from kivy.uix.widget import Widget

class MouseWidget(Widget):
    def on_touch_down(self, touch):
        print(touch)


class MyApp(App):
    def build(self):
    root = Accordion(orientation='horizontal')

    item= AccordionItem(title='Picture1')
    src = "picture1.png"
    image = Image(source=src,pos=(200, 100))
    # add image to AccordionItem
    item.add_widget(image)
    root.add_widget(item)


    item= AccordionItem(title='Picture2')
    src = "picture2.png" 
    image = Image(source=src,pos=(200, 100))
    # add image to AccordionItem
    item.add_widget(image)
    root.add_widget(item)

    return root

if __name__ == '__main__':
    MyApp().run()
4

1 に答える 1

1

これは、画像の下のラベルにタッチ位置を追加するプログラムへの簡単な変更です。kivy 言語を使用して必要なプロパティに自動的にバインドし、変更時に表示が更新されるようにします。

特にどのような問題が発生したかはわかりません。動作の仕方が明確でない場合はお知らせください。

from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.image import Image
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout

Builder.load_string('''
<MouseWidget>:
    image: image
    label: label
    orientation: 'vertical'
    Image:
        id: image
        source: root.source
    Label:
        id: label
        size_hint_y: None
        height: 50
        text: 'no touch detected'

''')

class MouseWidget(BoxLayout):
    image = ObjectProperty()
    label = ObjectProperty()
    source = StringProperty()

    def on_touch_down(self, touch):
        if self.image.collide_point(*touch.pos):
            self.label.text = str(touch.pos)

    def on_touch_up(self, touch):
        self.label.text = 'no touch detected'


class MyApp(App):
    def build(self):
        root = Accordion(orientation='horizontal')

        item= AccordionItem(title='Picture1')
        src = "picture1.png"
        image = MouseWidget(source=src)
        # add image to AccordionItem
        item.add_widget(image)
        root.add_widget(item)


        item= AccordionItem(title='Picture2')
        src = "picture2.png"
        image = MouseWidget(source=src)
        # add image to AccordionItem
        item.add_widget(image)
        root.add_widget(item)

        return root

if __name__ == '__main__':
    MyApp().run()

何かを追加するたびに、プログラム全体がシャットダウンするようです。

これは、変更によってプログラムがクラッシュしたようです。端末でプログラムを実行して、プログラムの出力を確認する必要があります。間違いを追跡するのに役立つエラーに関する情報が出力されます。

于 2013-10-19T14:14:08.337 に答える