我只是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()
我的问题是,为什么即使我按下屏幕的其他部分(不是图像),应用程序仍将整个屏幕视为按钮?
请原谅我的无知,我真的很想学习。谢谢!答案 0 :(得分:6)
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()