Kivy AttributeError: объект 'NoneType' не имеет атрибута 'текущий' - PullRequest
0 голосов
/ 01 августа 2020

Я новичок в Киви и буду очень признателен за помощь. Я пытаюсь заставить кнопку «Управление жителями» переключать экраны, но выдает ошибку:

self.manager.current = 'manageResidents'
AttributeError: 'NoneType' object has no attribute 'current''

Вот мой код:

import sqlite3
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
from kivy.base import runTouchApp
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.textinput import TextInput
from kivy.properties import ObjectProperty
        
class mainMenu(Screen):
    def __init__(self, **kwargs):
        super(mainMenu, self).__init__(**kwargs)
        # Selects the first name and last name of all residents and sorts by ascending order
        db = sqlite3.connect("mainDatabase.db")    
        cursor = db.cursor()
        dropDownValues = cursor.execute("SELECT firstName, lastName FROM residents ORDER BY firstName ASC").fetchall()
        db.close()
        mainDropdown = DropDown()#Assigns the variable mainDropdown to be a dropdown menu

Это кнопка, которая должен изменить экран

btn = Button(text="Manage Residents", size_hint_y=None, height=44)#Creates a button at the top of the dropdown menu that switches to manage residents screen
btn.bind(on_release=lambda btn: mainDropdown.select(btn.text))
btn.bind(on_release=self.changer)

Остальной код:

        mainDropdown.add_widget(btn)
        mainButton = Button(text='Residents', size_hint=(0.25, 0.1))#Sets the name of the dropdown button, sizes it and makes it change its text to what the user has clicked on
        mainButton.bind(on_release=mainDropdown.open)
        runTouchApp(mainButton)
    def changer(self,*args):
        self.manager.current = 'manageResidents'

class manageResidents(Screen):
    def __init__(self, **kwargs):
        super(manageResidents, self).__init__(**kwargs)
        my_label1 = Label(text="You are now on manage residents screen", font_size='24dp')

class MyApp(App):
    def build(self):
        my_screenmanager = ScreenManager()
        screen1 = mainMenu(name='Main Menu')
        screen2 = manageResidents(name='Manage Residents')
        my_screenmanager.add_widget(screen1)
        my_screenmanager.add_widget(screen2)
        return my_screenmanager

if __name__ == "__main__":
    MyApp().run()here

1 Ответ

0 голосов
/ 01 августа 2020

Проблема

В вашем приложении две проблемы.

  1. В вашем приложении оно работает runTouchApp (mainButton) . Следовательно, нет атрибута 'current'
  2. Нет экранного имени 'manageResidents'

Решение

  1. Замените runTouchApp (mainButton) на self.add_widget (mainButton)
  2. Замените 'manageResidents' на 'ManageResidents'
...