Я пытаюсь выучить OOP и возиться с Киви, я сделал начальную страницу с фоновым изображением и lo go, который функционирует как кнопка, пока все хорошо.
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.uix.image import AsyncImage, Image
from kivy.uix.behaviors import ButtonBehavior
from kivy.uix.image import Image
# dir
src='C:\\Users\\Scott\\projects\\Kivy\\botGUI\\static\\ims\\mainResize.png'
src2='C:\\Users\\Scott\\projects\\Kivy\\botGUI\\static\\ims\\etoro.png'
# make window same size as background image:
from kivy.config import Config
Config.set('graphics', 'width', '960')
Config.set('graphics', 'height', '600')
class rootWidget(FloatLayout):
def __init__(self,**kwargs):
super(rootWidget, self).__init__(**kwargs)
self.add_widget(AsyncImage(source=src))
# use logos in dir for buttons
class myButton(ButtonBehavior, Image):
def __init__(self,**kwargs):
super(myButton, self).__init__(**kwargs)
self.source = 'C:\\Users\\Scott\\projects\\Kivy\\botGUI\\static\\ims\\etoro.png'
self.size_hint=(.25,.25)
self.pos_hint={'center_x':.15,'center_y':.85}
def on_press(self):
print ('etoro pressed')
class mainApp(App):
def build(self):
self.root = root = rootWidget()
root.add_widget(myButton())
return root
if __name__ == '__main__':
mainApp().run()
следующим шагом будет итерация по подкаталогу и создание кнопки для каждого lo go, поэтому мне не нужно будет жестко их кодировать, поэтому в качестве первого шага я изменю класс myButton, чтобы удалить зашифрованная информация в классе:
текущая
class myButton(ButtonBehavior, Image):
def __init__(self,src,xs,ys,xc,yc):
self.src = src
self.xs = xs
self.ys = ys
self.xc = xc
self.yc = yc
super(myButton, self).__init__()
def drawButton(self):
self.source = src
self.size_hint=(xs,ys)
self.pos_hint={'center_x':xc,'center_y':yc}
def on_press(self):
print ('pressed',src)
и настройка метода сборки:
class mainApp(App):
def build(self):
self.root = root = rootWidget()
root.add_widget(myButton(src2,0.1,0.1,0.,0.).drawButton)
return root
это выдает ошибку:
Traceback (most recent call last):
File "t.py", line 60, in <module>
mainApp().run()
File "C:\Users\Scott\projects\Kivy\envs\lib\site-packages\kivy\app.py", line 829, in run
root = self.build()
File "t.py", line 54, in build
root.add_widget(myButton(src2,0.1,0.1,0.,0.).drawButton)
File "C:\Users\Scott\projects\Kivy\envs\lib\site-packages\kivy\uix\floatlayout.py", line 135, in add_widget
widget.bind(
AttributeError: 'function' object has no attribute 'bind'
Мой вопрос заключается в том, правильно ли я использую класс и передаю аргументы, но допустил ошибку еще где (мое подозрение супер) или я что-то упустил в отношении ОО?