关键时钟警告使用Kivy RST编辑器进行过多迭代

时间:2017-10-19 05:45:57

标签: kivy restructuredtext kivy-language

在一个更大的应用程序中,我在一个单独的屏幕中有一种第一个编辑器。只要在输入窗口小部件中键入一个字符,我就会得到一个持续的关键时钟警告列表: [关键] [时钟]警告,在下一帧之前完成了太多的迭代。检查您的代码,或增加Clock.max_iteration属性

我增加了max-iteration属性,但这并没有解决问题。同样在下面的代码中,如果我设置大小,它没有任何区别。

我怎么能解决这个问题?

编辑屏幕文件:

from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
from kivy.clock import Clock
from functools import partial

Builder.load_file('editscreen.kv')

class EditScreen(Screen):
    '''Screen class.'''

    def __init__(self, **kwargs):
        super(EditScreen, self).__init__(**kwargs)

    def updaterst(self):
        inptext = self.txt_inpt.text
        Clock.schedule_once(partial(self.do_update, inptext), 0.1)

    def do_update(self, text, *args):
        self.rsttxt.text = text

和kv文件:

# File: editscreen.kv
#: import editscreen editscreen

<EditScreen>:
    name: 'EditScreen'

    txt_inpt:txt_inpt
    rsttxt:rsttxt

    BoxLayout:
        orientation: 'vertical'
        #size_hint: (.99, .99)
        TextInput:
            id: txt_inpt
            #size_hint: None, None
            #size: 400, 400
            on_text: root.updaterst()
        RstDocument:
            id: rsttxt
            #size_hint: None, None
            #size: 400, 400
            show_errors: True

3 个答案:

答案 0 :(得分:1)

size_hint :(无,无)

要更改大小,您必须将以下内容添加到kv文件中。有关详细信息,请参阅以下应用程序。

格式

widget.size_hint = (width_percent, height_percent)

实施例

size_hint: (None, None)
size_hint: (1, None)

应用示例

editor.py

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.properties import ObjectProperty
from kivy.clock import Clock
from functools import partial


class MyScreenManager(ScreenManager):
    pass


class EditScreen(Screen):
    '''Screen class.'''
    txt_inpt = ObjectProperty(None)
    rsttxt = ObjectProperty(None)

    def __init__(self, **kwargs):
        super(EditScreen, self).__init__(**kwargs)

    def updaterst(self):
        inptext = self.txt_inpt.text
        Clock.schedule_once(partial(self.do_update, inptext), 0.1)

    def do_update(self, text, *args):
        self.rsttxt.text = text


class EditorApp(App):
    title = "Kivy RichText Editor"

    def build(self):
        return MyScreenManager()


if __name__ == "__main__":
    EditorApp().run()

editor.kv

#:kivy 1.10.0

<MyScreenManager>:
    EditScreen:

<EditScreen>:
    name: 'EditScreen'

    txt_inpt:txt_inpt
    rsttxt:rsttxt

    BoxLayout:
        orientation: 'vertical'
        # size_hint: (.99, .99)
        TextInput:
            id: txt_inpt
            size_hint: 1, None
            height: root.height / 2
            on_text: root.updaterst()
        RstDocument:
            id: rsttxt
            size_hint: 1, None
            height: root.height / 2
            show_errors: True

输出

App with text input

答案 1 :(得分:1)

我刚刚编辑了一下你的代码并且工作正常没有严重警告:

-py:

from kivy.uix.screenmanager import Screen
from kivy.clock import Clock
from kivy.properties import ObjectProperty
from kivy.app import App


class EditScreen(Screen):
   '''Screen class.'''
   txt_inpt = ObjectProperty()

   def __init__(self, **kwargs):
      super(EditScreen, self).__init__(**kwargs)
      Clock.schedule_interval(self.do_update, 0.1)

   def do_update(self, *args):
      self.rsttxt.text = self.txt_inpt.text

class EditorApp(App):

   def build(self):
      return EditScreen()


if __name__ == "__main__":
   EditorApp().run()

-kv:

<EditScreen>:
   name: 'EditScreen'

   txt_inpt:txt_inpt
   rsttxt:rsttxt

   BoxLayout:
      orientation: 'vertical'
      #size_hint: (.99, .99)
      TextInput:
         id: txt_inpt
         #size_hint: None, None
         #size: 400, 400
      RstDocument:
         id: rsttxt
         #size_hint: None, None
         #size: 400, 400
         show_errors: True

输出:

no warning

请尝试我的代码告诉我们

答案 2 :(得分:1)

所有与按钮有关。如果连续有许多按钮并且超出了屏幕,则将其缩小会出现错误。我输入了size_hint:无,无,它起作用了。使用FloatLayout定位按钮和其他元素。在dp,sp中设置大小,以使它们不会彼此重叠。为大屏幕制作应用。