簡體   English   中英

Kivy - ScreenManager 說它不識別另一個屏幕名稱,盡管它在那里?

[英]Kivy - ScreenManager saying it does not recognize another screen name despite it being there?

所以,我想創建一個在 kivy 中創建任務/習慣的應用程序。 基本上,會有一個屏幕顯示您的任務/習慣,您可以單擊一個按鈕將您帶到另一個屏幕以創建新的任務/習慣。 您將在該屏幕中輸入有關任務/習慣的信息,然后單擊提交按鈕。 提交按鈕會將任務/習慣添加到第一個屏幕。 但是,當我運行我的代碼時,它第一次運行。 我可以轉到第二個屏幕,添加我的習慣/代碼,然后返回第一個屏幕。 但是,當我單擊第一個屏幕上的按鈕時,它給了我一個錯誤。

錯誤是:kivy.uix.screenmanager.ScreenManagerException:沒有名稱為“second”的屏幕。

這是我的代碼:

主要.py:

from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.image import Image
from PIL import Image
import numpy as np

class FirstWindow(Screen):
    def add_label(self, name, time, date):
        label = Label(text= f' {name}, {time}, {date}')
        self.ids.boxlayout.add_widget(label)


class SecondWindow(Screen):
    a_task = False
    a_habit = False
    name = ""
    time = ""
    date = ""

    def task_button(self):
        self.a_task = True
        self.a_habit = False


    def habit_button(self):
        self.a_habit = True
        self.a_task = False


    def submit_button(self):
        self.name = self.ids.the_name.text
        self.time = f'{self.ids.time_spinner_1.text}:{self.ids.time_spinner_2.text}'
        self.date = f'{self.ids.date_spinner_1.text}/{self.ids.date_spinner_2.text}'


    def get_name(self):
        return self.name

    def get_time(self):
        return self.time

    def get_date(self):
        return self.date


kv = Builder.load_file('Button.kv')


class ButtonApp(App):
    def build(self):
        sm = ScreenManager()
        sm.add_widget(FirstWindow())
        sm.add_widget(SecondWindow())
        return sm

if __name__ == '__main__':
    ButtonApp().run()

按鈕.kv:

<FirstWindow>:
    name: "first"
    BoxLayout:
        id: boxlayout
        orientation: "vertical"
        canvas.before:
            Color:
                rgba: (0.3,0.33,0.3,1)
            Rectangle:
                pos: self.pos
                size: self.size
        FloatLayout:
            Label:
                text: "To Do List"
                font_size: 32
                pos_hint: { 'right': 0.65, 'top': 1.4 }
        Button:
            text: "add a task"
            on_release: root.manager.current = "second"

<SecondWindow>:
    name: "second"
    BoxLayout:
        orientation: "vertical"
        spacing: "10dp"
        canvas.before:
            Color:
                rgba: (0.3,0.33,0.3,1)
            Rectangle:
                pos: self.pos
                size: self.size
        FloatLayout:
            Label:
                text: "Add A Task"
                font_size: 32
                pos_hint: { 'right': 0.65, 'top': 1.2 }
        BoxLayout:
            orientation: "horizontal"
            Button:
                text: "task"
                on_press: root.task_button()
            Button:
                text: "habit"
                on_press: root.habit_button()

        TextInput:
            id: the_name
            text: "Name"

        Label:
            text: "alert"

        BoxLayout:
            orientation: "horizontal"
            Spinner:
                id: time_spinner_1
                text: "00"
                values: ['1','2','3','4','5','6','7','8','9','10','11', '12']

            Spinner:
                id: time_spinner_2
                text: "00"
                values: ['01','02','03','04','05','06','07','08','09','10','11', '12', '13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59']

        BoxLayout:
            orientation: "horizontal"
            Spinner:
                id: date_spinner_1
                text: "00"
                values: ['1','2','3','4','5','6','7','8','9','10','11', '12']

            Spinner:
                id: date_spinner_2
                text: "00"
                values: ['01','02','03','04','05','06','07','08','09','10','11', '12', '13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31']



        Button:
            text: "submit"
            on_press: root.submit_button()
            on_release:
                root.manager.current = "first"
                root.manager.get_screen("first").add_label(root.get_name(), root.get_time(), root.get_date())

你的代碼:

def submit_button(self):
    self.name = self.ids.the_name.text
    self.time = f'{self.ids.time_spinner_1.text}:{self.ids.time_spinner_2.text}'
    self.date = f'{self.ids.date_spinner_1.text}/{self.ids.date_spinner_2.text}'

更改SecondWindow Screenname屬性,因此嘗試將Screen更改為second將不再起作用。 看起來您正試圖將name用於其他目的。 我建議您使用具有不同名稱的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM