首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关闭DatePicker时出现Kivy错误(MultiScreen)

关闭DatePicker时出现Kivy错误(MultiScreen)
EN

Stack Overflow用户
提问于 2021-08-15 14:43:14
回答 1查看 39关注 0票数 0

我在试着学习Kivy。当我单独编写代码时,大多数东西都可以工作。但是,当我像MultiScreen一样与其他代码组合在一起时,我总是步履蹒跚。

在这里,我希望在关闭DatePicker之后更改文本(id: date_label。相同的代码在没有MultiScreen的情况下也可以工作

错误:第31行,在on_cancel self.root.ids.date_label.text = "Cancel“根:'CreateScreen‘对象没有’根‘属性

代码语言:javascript
运行
复制
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager
from kivymd.uix.picker import MDDatePicker

Window.size = (350, 600)



class MenuScreen(Screen):
    def input_user(self):
        global username_1
        username_1 = self.userinput.text
        print(username_1)


class MainScreen(Screen):
    def user_name(self):
        print(username_1)


class CreateScreen(Screen):

    # Click Ok
    def on_save(self, instance, value, date_range):
        print(instance, value, date_range)

    
    # Click Close
    def on_cancel(self, instance, value): # HERE IS THE ERROR
        self.root.ids.date_label.text = "Cancel"

    def show_date_picker(self):
        date_dialog = MDDatePicker()
        date_dialog.bind(on_save=self.on_save, on_cancel=self.on_cancel)
        date_dialog.open()


sm = ScreenManager()
sm.add_widget(MenuScreen(name="menu"))
sm.add_widget(MainScreen(name="main-screen"))
sm.add_widget(CreateScreen(name="create-screen"))


class MyApp(MDApp):
    def build(self):

        screen = (Builder.load_file("kvfile.kv"))
        return screen


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

KV文件

代码语言:javascript
运行
复制
ScreenManager:
    MenuScreen:
    MainScreen:
    CreateScreen:


<MenuScreen>:
    userinput: input
    name: "menu"
    BoxLayout:
        padding: "50dp"
        MDTextField:
            id: input
            padding: "10dp"
            hint_text: "Enter Username"
            pos_hint: {"center_x": 0.5, "center_y": 0.6}
    MDRectangleFlatButton:
        text: "Continue"
        pos_hint: {"center_x": 0.5, "center_y":0.5}
        on_release: root.manager.current = "main_screen" 
        on_press: root.input_user()


<MainScreen>:
    name: "main_screen"
    MDLabel:
        text: "Welcome"
        halign: "center"
        pos_hint: {"center_x": 0.5, "center_y": 0.9}
    MDRectangleFlatButton:
        text: "Back"
        pos_hint: {"center_x": 0.5, "center_y":0.2}
        on_press: root.manager.current = "menu"
    MDRectangleFlatButton:
        text: "Print"
        pos_hint: {"center_x": 0.5, "center_y":0.6}
        on_release: root.manager.current = "create_screen"
    MDRectangleFlatButton:
        text: "Empty"
        pos_hint: {"center_x": 0.5, "center_y":0.4}
        on_press: root.manager.current = "menu"


<CreateScreen>
    name: "create_screen"
    MDRaisedButton:
        text: "Date"
        pos_hint: {"center_x": 0.5, "center_y" : 0.5}
        on_release: root.show_date_picker()

    MDLabel:
        id: date_label
        text: "Select Date"
        pos_hint: {"center_x": 1, "center_y" : 0.4}

谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-15 18:13:27

错误告诉您'CreateScreen' object has no attribute 'root'。您正在尝试引用一行中的root

代码语言:javascript
运行
复制
self.root.ids.date_label.text = "Cancel"

在该行中,selfCreateScreen的实例,因此self.root尝试访问self (CreateScreen)的root属性。如果您正在尝试访问CreateScreenids,则只需使用:

代码语言:javascript
运行
复制
self.ids.date_label.text = "Cancel"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68792587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档