2015-11-02 124 views
0

我只是基维和面向对象编程的初学者。Kivy--图像作为按钮

我一直在练习这个代码作为教程的组合在这里:

from kivy.uix.behaviors import ButtonBehavior 
from kivy.uix.image import Image 
from kivy.lang import Builder 
from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 

Builder.load_string(""" 
<ImageButton>: 
    FloatLayout: 
     Image: 
      source:'resizedA.png' 
      size_hint: .2, .2 
""") 

class ImageButton(ButtonBehavior,FloatLayout, Image): 
    def on_press(self): 
     print ('pressed') 


class The_AssignmentApp(App): 
    def build(self): 
     return ImageButton() 

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

我的问题是,这是为什么即使我按屏幕(不是图像)的其他部分,应用程序仍然认为整个碎石作为一个按钮?

请原谅我在这里的无知,我真的很想学习。谢谢!

回答

1
class ImageButton(ButtonBehavior,FloatLayout, Image): 

不要继承多个小部件(在本例中为FloatLayout和Image),这会导致一些奇怪的错误。

至于你的具体问题,ButtonBehavior是ImageButton的父类,它是根部件并填充屏幕。由于这个原因,整个屏幕的一个按钮,尽管你明确表示否则。

下面更像是你想要的吗?你也可以使用FloatLayout而不是创建新的RootWidget类,我只是这样做以适应你已经写的内容。

from kivy.uix.behaviors import ButtonBehavior 
from kivy.uix.image import Image 
from kivy.lang import Builder 
from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 

class RootWidget(FloatLayout): 
    pass 

class ImageButton(ButtonBehavior, Image): 
    def on_press(self): 
     print ('pressed') 

Builder.load_string(""" 
<RootWidget>: 
    ImageButton: 
     source:'resizedA.png' 
     size_hint: .2, .2 
""") 

class The_AssignmentApp(App): 
    def build(self): 
     return RootWidget() 

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