• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Python kivy przechodzenie między ekranami, brak parametru.

0 głosów
449 wizyt
pytanie zadane 4 grudnia 2023 w Python przez tubylec01 Obywatel (1,610 p.)
zamknięte 4 grudnia 2023 przez tubylec01

Hej,

Mam pewien problem z wywoływaniem funkcji  

go_to_second_screen

Komunikat jaki otrzymuje to: TypeError: ScreenManager.switch_to() missing 1 required positional argument: 'screen', wiem, że brakuje mu argumentu 'screen" ale dlaczego w przejściu z pierwszego ekranu do drugiego nie brakuje tego? W czym tutaj tkwi problem?

Dodam, że przechodzę od ekranu zerowego do ekranu trzeciego (każdy ekran jest osobna klasą) problem jest, jeśli chce powrócić z ekranu trzeciego do drugiego.

Klasa ekranu trzeciego + funkcja powrotu do ekranu 2 (która nie działa):

class ThirdScreen(Screen):
    def __init__(self, file='', **kw):
        super().__init__(**kw)
        self.actual_row_in_edit = None
        self.data_tables = None
        self.len_of_text = None
        self.lines = []
        self.link = None
        self.texts = []
        self.modification = False
        self.warning_pop = PopupWaring()
        self.info_pop = PopupInfo()
        self.save_as_pop = PopupSaveAS()
        self.full_file_name = file
    
    FULL_FILE_NAME = ''
    SCREEN_MANAGER = None

 @staticmethod
    def go_to_second_screen():
        from second_screen import SecondScreen
        ThirdScreen.SCREEN_MANAGER.switch_to(SecondScreen(path='', file_name='',), direction='up', duration=0.5)

 

Klasa ekranu drugiego:

class SecondScreen(Screen):
    def __init__(self, path="", file_name='', **kw):
        super().__init__(**kw)
        self.wait_pop = PopupWait()
        self.file_name = file_name
        self.path = path

    SCREEN_MANAGER = None

 

"Budowanie" aplikacji:

class Reader(MDApp):
    def build(self):
        Window.size = (1920, 1040)
        Window.borderless = True

        Window.top = 0
        Window.left = -1920

        screen_manager.add_widget(ZeroScreen(name='zero', sn_manager=screen_manager))
        screen_manager.add_widget(FirstScreen(name='first'))
        screen_manager.add_widget(SecondScreen(name='second'))
        screen_manager.add_widget(ThirdScreen(name='third'))
        
        FirstScreen.SCREEN_MANAGER = screen_manager
        SecondScreen.SCREEN_MANAGER = screen_manager
        ThirdScreen.SCREEN_MANAGER = ScreenManager
        return screen_manager

 

Klasa ekranu pierwszego + funkcja przejścia do ekranu drugiego (tutaj zawsze działa przechodzenie do ekranu drugiego)

class FirstScreen(Screen):
    def __init__(self, **kw):
        super().__init__(**kw)
        self.pop_login = PopupLogIN()

    SCREEN_MANAGER = None
@staticmethod
    def open_csv(instance, ready_path="", file_name=""):
        from second_screen import SecondScreen
        FirstScreen.SCREEN_MANAGER.switch_to(SecondScreen(path=ready_path, file_name=file_name), direction='up',
                                             duration=0.5)

def on_pre_enter(self, *args):
            // poboczne rzeczy
            for i in range(len(buttons)):
                buttons[i].bind(on_press=partial(self.open_csv, ready_path=ready_path, file_name=file_name))

 

Wywołanie owej funkcji następuje z pliku .kv

MyButton:
                    id: bn_back
                    text: 'Powrót'
                    on_press: root.go_to_second_screen()

 

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

0 głosów
odpowiedź 4 grudnia 2023 przez adrian17 Mentor (355,180 p.)
wybrane 4 grudnia 2023 przez tubylec01
 
Najlepsza
        FirstScreen.SCREEN_MANAGER = screen_manager
        SecondScreen.SCREEN_MANAGER = screen_manager
        ThirdScreen.SCREEN_MANAGER = ScreenManager

Raz przypisujesz zmienną z managerem, a raz klasę.

(btw, po co te capsy?)

komentarz 4 grudnia 2023 przez tubylec01 Obywatel (1,610 p.)
Tak dzięki, dokładnie przed chwilą tez do zauważyłem.
Dopadł i mnie przysłowiowy przecinek...

Po co te capsy? Hmm zmienne "globalne" tak sobie tworzę, jak mówi na to praktyka dobrego kodu, wszystko małymi?
1
komentarz 4 grudnia 2023 przez adrian17 Mentor (355,180 p.)

jak mówi na to praktyka dobrego kodu

Praktyka "dobrego kodu" mówi, żeby ogólnie unikać zmiennych globalnych :P

komentarz 4 grudnia 2023 przez tubylec01 Obywatel (1,610 p.)
To jeśli chcesz :) to możesz mi jeszcze pokazać/powiedzieć jak byś na przykładzie mojego kody przeniósł tą zmienną? Podać jako argument do __init__?
komentarz 4 grudnia 2023 przez adrian17 Mentor (355,180 p.)
Tu się raczej kompetentnie nie wypowiem, bo nie znam tego frameworka i jak się w nim typowo robi rzeczy, sorry :c
komentarz 4 grudnia 2023 przez tubylec01 Obywatel (1,610 p.)
Spoko i tak dzięki ;)

Podobne pytania

0 głosów
1 odpowiedź 1,175 wizyt
pytanie zadane 15 lutego 2023 w Python przez tubylec01 Obywatel (1,610 p.)
0 głosów
0 odpowiedzi 300 wizyt
pytanie zadane 5 grudnia 2020 w Python przez Miki Bywalec (2,480 p.)
0 głosów
1 odpowiedź 597 wizyt
pytanie zadane 21 listopada 2020 w Python przez Miki Bywalec (2,480 p.)

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...