Киви не показывает изображение - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать простое приложение, которое будет отображать изображение после нажатия кнопки.

До сих пор мне удалось создать кнопку в классе ShootButton и связать ее с классом Bullet. Проблема в том, что после вызова класса Bullet изображение не появляется. Я знаю, что класс вызывается, потому что он печатает «тест», но не изображение.

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.image import Image
from kivy.uix.widget import Widget


Window.size = (360, 640)

class Game(Widget):
    pass


class ShootButton(Widget):
    def shoot(self):
        shooting = Bullet()
        shooting.bullet_fly()

class Bullet(Widget):
    def bullet_fly(self):
        img = Image(source='bullet.png')
        self.add_widget(img)
        print('test')

class MyApp(App):
    def build(self):
        return Game()

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

И файл Kv:

<Game>
    ShootButton:


<ShootButton>
    Button:
        text: "shoot!"
        size: 70,50
        font_size: 20
        pos: 100,100
        on_press: root.shoot()

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Чтобы добавить изображение маркера в корень ( Игра ), используйте App.get_running_app (). Root.add_widget (img) .

Отрывки

class Bullet(Widget):
    def bullet_fly(self):
        img = Image(source='bullet.png', size_hint_y=None, height=dp(40), pos=(85, 200))
        App.get_running_app().root.add_widget(img)

Пример

main.py

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.image import Image
from kivy.uix.widget import Widget
from kivy.metrics import dp


Window.size = (360, 640)


class Game(Widget):
    pass


class ShootButton(Widget):
    def shoot(self):
        shooting = Bullet()
        shooting.bullet_fly()


class Bullet(Widget):
    def bullet_fly(self):
        img = Image(source='bullet.jpeg', size_hint_y=None, height=dp(40), pos=(85, 200))
        App.get_running_app().root.add_widget(img)
        print('test')


class MyApp(App):
    def build(self):
        return Game()


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

выход

Img01 - App Startup Img02 - Bullet flying

0 голосов
/ 26 апреля 2018

Вы не добавляете виджет маркера в иерархию kivy.

Я полагаю, вы хотели бы сделать что-то вроде этого:

class ShootButton(Widget):
    def shoot(self):
        shooting = Bullet()
        self.parent.add_widget(shooting.img)
        shooting.bullet_fly()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...