【问题标题】:kivy remove_widget is not workingkivy remove_widget 不工作
【发布时间】:2015-07-25 20:58:09
【问题描述】:

我想制作一个 kivy 游戏,火柴人在屏幕上跑来跑去,只要你点击它,火柴人就会被移除。 我尝试使用 Place.remove_widget(Enemy) 删除敌人小部件,但程序崩溃并收到以下错误消息:

TypeError: unbound method remove_widget() 必须以 Place 实例作为第一个参数调用(取而代之的是 WidgetMetaclass 实例)

这是我的源代码:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.properties import NumericProperty
from kivy.clock import Clock
from kivy.animation import Animation

class Place(FloatLayout):
    pass
class Enemy(Widget):
    velocity = NumericProperty(1)
    def __init__(self, **kwargs):
        super(Enemy, self).__init__(**kwargs)
        Clock.schedule_interval(self.Update, 1/60.)
    def Update(self, *args):
        self.x -= self.velocity
        if self.x < 1:
            self.velocity = 0
    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            print 'es geht'
            self.velocity = 0
            Place.remove_widget(Enemy)


ROOT = Builder.load_string('''
Place:
    Button:
        text: 'Go Back'
        size_hint: 0.3, 0.1
        pos_hint: {"x": 0, 'y':0}
    Enemy:
        pos: 400, 100
<Enemy>:
    Image:
        pos: root.pos
        id: myimage
        source: 'enemy.png'

''')

class Caption(App):
    def build(self):
        return ROOT
if __name__ == '__main__':
    Caption().run()

【问题讨论】:

    标签: python kivy


    【解决方案1】:
    Place.remove_widget(Enemy)
    

    这就是问题所在 - 您不是试图从 Place 类的 instance 中删除 Enemy 类的 instance,而是试图删除实际的从另一个类本身。这就是a = Placea = Place() 之间的区别——前者是关于如何制作 Place 的说明,后者是一个实际的个人 Place 实例。

    在这种情况下你可能会做self.parent.remove_widget(self); self.parent 是包含 Enemy 实例的 Place 实例。

    【讨论】:

    • 我得到错误:'Place'对象没有属性'remove'
    • 抱歉,打错字了(现已修正),应该是 remove_widget
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多