Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “为什么我的屏幕对象是”;“不可赎回”;当试图用按钮显示屏幕时?_Python_Kivy - Fatal编程技术网

Python “为什么我的屏幕对象是”;“不可赎回”;当试图用按钮显示屏幕时?

Python “为什么我的屏幕对象是”;“不可赎回”;当试图用按钮显示屏幕时?,python,kivy,Python,Kivy,我想在按下按钮时显示第二个屏幕,但出现错误,TypeError:“kivy.properties.StringProperty”对象不可调用。如果我从代码中删除ScreenManager.current('ScreenTwo'),那么错误就会消失,但是,在保存输入的数据后,我需要某种方式来显示屏幕。为什么我会出现这个错误,我将如何修复它 这是我的密码: class TwoLayout(GridLayout): def display_btn(self): for key

我想在按下按钮时显示第二个屏幕,但出现错误,TypeError:“kivy.properties.StringProperty”对象不可调用。如果我从代码中删除
ScreenManager.current('ScreenTwo')
,那么错误就会消失,但是,在保存输入的数据后,我需要某种方式来显示屏幕。为什么我会出现这个错误,我将如何修复它

这是我的密码:

class TwoLayout(GridLayout):
    def display_btn(self):
        for key in MainApp.store:
            streak_button = Button(text=key)
            ids.streak_zone.add_widget(streak_button)



presentation = Builder.load_file("StreakStar.kv")

class MainApp(App):
    def build(self): # build() returns an instance
        self.store = JsonStore("streak.json")

        return presentation

    # creates the Streak object
    def create(self):
        obj = self.root.get_screen('one') # get info from ScreenOne
        self.streak = Streak(obj.ids.action_entry.text, obj.ids.streak_entry.text,
                            obj.ids.day_entry.text, obj.ids.hour_entry.text,
                            obj.ids.minute_entry.text)

        empty_error = "Make sure to fill out all boxes!"

        popup = Popup(title="Not filled", content=Label(text=empty_error),
                     size_hint=(None, None), size=(300, 100))



        # error handling and calculating total seconds
        parsed = False
        try:
            total = ((int(self.streak.day) * 86400) + (int(self.streak.hour) * 3600) +
                    (int(self.streak.minute) * 60)) # convert into seconds
            parsed = True
            # delete later and replace with return
            print("[seconds:", total,']' , "[action:", self.streak.action,']',
                 "[action number:", self.streak.action_num,']')

            self.store.put(self.streak.action, action=self.streak.action,
                          action_num=self.streak.action_num, seconds=total,
                          score=self.streak.score)

            ScreenManager.current('ScreenTwo')


        except ValueError as error:
            popup.open()

.kv代码:

ScreenManagement:
    transition: SlideTransition()
    MainScreen:
    ScreenOne:
    ScreenTwo:
      ...

<TwoLayout>
<ScreenTwo>
    on_pre_enter: TwoLayout.display_btn()
    name: "two"
    GridLayout:
        cols: 2
        rows: 1
        BoxLayout:
            id: streak_zone
            orientation: 'vertical'
        AnchorLayout:
            anchor_x: "center"
            anchor_y: "center"
            Label:
                id: high_lable
                text: "Highest Streak: "
                size_hint: None, None
                font_size: 20


屏幕管理:
转换:SlideTransition()
主屏幕:
第一屏:
屏幕二:
...
在\u pre\u输入:twoolayout.display\u btn()
姓名:“两个”
网格布局:
科尔斯:2
行数:1
盒子布局:
id:条纹区
方向:“垂直”
主持人安排:
主播x:“中心”
主播:“中心”
标签:
id:高标签
文字:“最高条纹:”
大小提示:无,无
字体大小:20
完全回溯:

 Traceback (most recent call last):
   File "C:\Users\tonya\Desktop\realProjects\HaStreakual\HaStreakual.py", line 105, in <module>
     MainApp().run()
   File "C:\Python36\lib\site-packages\kivy\app.py", line 826, in run
     runTouchApp()
   File "C:\Python36\lib\site-packages\kivy\base.py", line 502, in runTouchApp
     EventLoop.window.mainloop()
   File "C:\Python36\lib\site-packages\kivy\core\window\window_sdl2.py", line 727, in mainloop
     self._mainloop()
   File "C:\Python36\lib\site-packages\kivy\core\window\window_sdl2.py", line 460, in _mainloop
     EventLoop.idle()
   File "C:\Python36\lib\site-packages\kivy\base.py", line 340, in idle
     self.dispatch_input()
   File "C:\Python36\lib\site-packages\kivy\base.py", line 325, in dispatch_input
     post_dispatch_input(*pop(0))
   File "C:\Python36\lib\site-packages\kivy\base.py", line 231, in post_dispatch_input
     listener.dispatch('on_motion', etype, me)
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Python36\lib\site-packages\kivy\core\window\__init__.py", line 1360, in on_motion
     self.dispatch('on_touch_down', me)
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Python36\lib\site-packages\kivy\core\window\__init__.py", line 1376, in on_touch_down
     if w.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Python36\lib\site-packages\kivy\uix\screenmanager.py", line 1191, in on_touch_down
     return super(ScreenManager, self).on_touch_down(touch)
   File "C:\Python36\lib\site-packages\kivy\uix\widget.py", line 460, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Python36\lib\site-packages\kivy\uix\relativelayout.py", line 288, in on_touch_down
     ret = super(RelativeLayout, self).on_touch_down(touch)
   File "C:\Python36\lib\site-packages\kivy\uix\widget.py", line 460, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Python36\lib\site-packages\kivy\uix\widget.py", line 460, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Python36\lib\site-packages\kivy\uix\behaviors\button.py", line 151, in on_touch_down
     self.dispatch('on_press')
   File "kivy\_event.pyx", line 703, in kivy._event.EventDispatcher.dispatch
   File "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
   File "kivy\_event.pyx", line 1098, in kivy._event.EventObservers._dispatch
   File "C:\Python36\lib\site-packages\kivy\lang\builder.py", line 64, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "C:\Users\tonya\Desktop\realProjects\HaStreakual\StreakStar.kv", line 100, in <module>
     on_press: app.create()
   File "C:\Users\tonya\Desktop\realProjects\HaStreakual\HaStreakual.py", line 84, in create
     ScreenManager.current('ScreenTwo')
 TypeError: 'kivy.properties.StringProperty' object is not callable
[Finished in 17.269s]

回溯(最近一次呼叫最后一次):
文件“C:\Users\tonya\Desktop\realProjects\HaStreakual\HaStreakual.py”,第105行,在
MainApp().run()
文件“C:\Python36\lib\site packages\kivy\app.py”,第826行,正在运行
runTouchApp()
runTouchApp中第502行的文件“C:\Python36\lib\site packages\kivy\base.py”
EventLoop.window.mainloop()
文件“C:\Python36\lib\site packages\kivy\core\window\window\u sdl2.py”,第727行,在mainloop中
self._mainloop()
文件“C:\Python36\lib\site packages\kivy\core\window\window\u sdl2.py”,第460行,在\u mainloop中
EventLoop.idle()
文件“C:\Python36\lib\site packages\kivy\base.py”,第340行,处于空闲状态
self.dispatch_input()
文件“C:\Python36\lib\site packages\kivy\base.py”,第325行,在dispatch\u输入中
发送后输入(*pop(0))
文件“C:\Python36\lib\site packages\kivy\base.py”,第231行,在post\u dispatch\u输入中
dispatch('on_motion',etype,me)
文件“kivy\\ u event.pyx”,第707行,在kivy.\u event.EventDispatcher.dispatch中
文件“C:\Python36\lib\site packages\kivy\core\window\\uuuu init\uuuu.py”,第1360行,动态
自我派遣(“在我触地时”)
文件“kivy\\ u event.pyx”,第707行,在kivy.\u event.EventDispatcher.dispatch中
文件“C:\Python36\lib\site packages\kivy\core\window\\uuuuu init\uuuuuu.py”,第1376行,在on\u触控下
如果w.dispatch('打开触摸屏',触摸屏):
文件“kivy\\ u event.pyx”,第707行,在kivy.\u event.EventDispatcher.dispatch中
文件“C:\Python36\lib\site packages\kivy\uix\screenmanager.py”,第1191行,在on\u触摸屏上
返回超级(屏幕管理器,自我)。打开触摸(触摸)
文件“C:\Python36\lib\site packages\kivy\uix\widget.py”,第460行,在on\u触摸屏中
如果是child.dispatch('on_touch_down',touch):
文件“kivy\\ u event.pyx”,第707行,在kivy.\u event.EventDispatcher.dispatch中
文件“C:\Python36\lib\site packages\kivy\uix\relativelayout.py”,第288行,在on\U触控下
ret=超级(相对性,自我)。打开触摸(触摸)
文件“C:\Python36\lib\site packages\kivy\uix\widget.py”,第460行,在on\u触摸屏中
如果是child.dispatch('on_touch_down',touch):
文件“kivy\\ u event.pyx”,第707行,在kivy.\u event.EventDispatcher.dispatch中
文件“C:\Python36\lib\site packages\kivy\uix\widget.py”,第460行,在on\u触摸屏中
如果是child.dispatch('on_touch_down',touch):
文件“kivy\\ u event.pyx”,第707行,在kivy.\u event.EventDispatcher.dispatch中
文件“C:\Python36\lib\site packages\kivy\uix\behaviors\button.py”,第151行,在on\u触摸屏中
自动发送('在印刷机上')
文件“kivy\\ u event.pyx”,第703行,在kivy.\u event.EventDispatcher.dispatch中
文件“kivy\\u event.pyx”,第1214行,在kivy.\u event.eventobserver.dispatch中
文件“kivy\\u event.pyx”,第1098行,在kivy.\u event.eventobserver.\u调度
文件“C:\Python36\lib\site packages\kivy\lang\builder.py”,第64行,在自定义\u回调中
exec(\uuuukVLANG\uuuuuuu.co\u值,idmap)
文件“C:\Users\tonya\Desktop\realProjects\HaStreakual\StreakStar.kv”,第100行,in
按:app.create()
文件“C:\Users\tonya\Desktop\realProjects\HaStreakual\HaStreakual.py”,第84行,在create中
ScreenManager.current('ScreenTwo')
TypeError:“kivy.properties.StringProperty”对象不可调用
[以17.269秒完成]

因为根目录是我的屏幕,所以我用它来表示屏幕,下面是两个代码:

def change_screen(self, *args):
        self.root.current = 'two'
        self.display_btn()


始终将完整的错误消息(回溯)放在问题中(作为文本,而不是屏幕截图)。还有其他有用的信息。请参阅文档-它们使用
.current=“text”
,而不是
.current(“text”)
<代码>.current是StringProperty,而不是函数/方法。
    parsed = False
        try:
            total = ((int(self.streak.day) * 86400) + (int(self.streak.hour) * 3600) +
                    (int(self.streak.minute) * 60)) # convert into seconds
            parsed = True

            # delete later just used to test
            print("[seconds:", total,']' , "[action:", self.streak.action,']',
                 "[action number:", self.streak.action_num,']')

            self.current_time = time.time()
            self.count = self.current_time + total

            # store streak attributes inside "streak.json"
            self.store.put(self.streak.action, action=self.streak.action,
                          action_num=self.streak.action_num, seconds=total,
                          score=self.streak.score, delta=self.count)




            self.change_screen(self)