Здесь есть две проблемы.
В этом ответе я покажу два примера. Первый без вложенных BoxLayout
, а второй с вложенными BoxLayout
.
В обоих примерах я буду использовать __init__
вместо welcome()
Вы также можете использовать welcome()
. Прочтите ниже, как это сделать.
Затем к двум проблемам:
Первое:
Вы никогда не запускать метод welcome()
в вашем Controller
классе.
Вы можете исправить это, выполнив его в приложении build
, прежде чем вы вернетесь root
. Как это:
root.welcome()
return root
Или вы могли бы поставить его в методе __init__
в классе. Я покажу пример этого, после того, как я объясню, что вторая проблема здесь.
Вторая проблема заключается в том, что вы создаете новый BoxLayout
в свой класс, который allready наследует BoxLayout
. Но вы никогда не добавляете этот новый BoxLayout
в ваш виджет, который в этом случае allready является BoxLayout
.
Итак, как исправить это.
Поскольку класс allready наследует BoxLayout
, вам не нужно создавать новое в этом простом приложении. Только если вам нужно вложить BoxLayout
, вы это сделаете.
Допустим, вам не нужно гнездиться еще BoxLayout
.
Пример того, как вы сделаете это, и использовать __init__
метод:
import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class Controller(BoxLayout):
def __init__(self,**kwargs):
super(Controller,self).__init__(**kwargs)
# this is what you need to overite the BoxLayout's __init__ method
# self.orientation and self.add_widget because self is the BoxLayout you inherited
self.orientation='vertical'
self.add_widget(Label(text='hellow',size_hint=(1,.1)))
self.add_widget(Button(text='welcom',size_hint=(1,.1)))
self.add_widget(Button(text='khoroj',size_hint=(1,.1)))
self.add_widget(Button(text='rahnama',size_hint=(1,.1)))
class UiApp(App):
def build(self):
root = Controller()
return root
if __name__ == '__main__':
UiApp().run()
Допустим, вам нужно гнездо другой BoxLayout
.
Вы бы так:
import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
class Controller(BoxLayout):
def __init__(self,**kwargs):
super(Controller,self).__init__(**kwargs)
# this is what you need to overite the BoxLayout's __init__ method
# I make this BoxLayout horizontal, and add a Button, just to show the idea of nesting
self.orientation='horizontal'
self.add_widget(Button(text='First Button'))
self.nested_boxlayout = BoxLayout(orientation="vertical")
# then we add stuff to the nested layout
self.nested_boxlayout.add_widget(Label(text='hellow',size_hint=(1,.1)))
self.nested_boxlayout.add_widget(Button(text='welcom',size_hint=(1,.1)))
self.nested_boxlayout.add_widget(Button(text='khoroj',size_hint=(1,.1)))
self.nested_boxlayout.add_widget(Button(text='rahnama',size_hint=(1,.1)))
# but we still need to add the nested layout to the root layout. (nest it)
self.add_widget(self.nested_boxlayout)
class UiApp(App):
def build(self):
root = Controller()
return root
if __name__ == '__main__':
UiApp().run()
пут «self.add_widget (WID)», как последняя строка приветствия (и убедитесь, что приветствуют получить звонок от somwere ...) – cox
@cox по сути мой ответ – EL3PHANTEN
@ EL3PHANTEN Да, только вам лучше объяснить. Я видел это слишком поздно – cox