Использование RST-документа в ScrollView с использованием Kivy

python kivy

420 просмотра

1 ответ

58 Репутация автора

Я в некотором затруднении. Во время работы с макетом ScrollView в Kivy и модулем рендеринга reStructuredText (Current Experimental) я столкнулся с небольшой проблемой. Всякий раз, когда я запускаю свой код, мой терминал спамит меня:

[CRITICAL] [Clock] Warning, too much iteration done before the next frame. Check your code, or increase the Clock.max_iteration attribute

Теперь приложение работает нормально, пока вы не попадете на страницу с документом rST внутри ScrollView Layout. Эта страница делает разные странные вещи. Основное представление прокрутки будет медленно прокручиваться вниз, навсегда, отставая страницу в белизну, а rST-документ размещается странным образом, слегка смещаясь влево.

Когда я удаляю документ, экран и приложение ведут себя совершенно нормально, работают без сбоев. У кого-нибудь есть идеи относительно того, как я могу это исправить, чтобы страница работала правильно? (Я упоминал, что документ rST изначально был в карусели, но я достал карусель, чтобы увидеть, не в этом ли проблема.) Вот код языка Kivy:

<Page>:
    orientation: 'vertical'
    ScrollView:
        size_hint: (.99, .99)
        StackLayout:
            size_hint_y: None
            id: content_layout
            height: self.minimum_height
            WrappedLabel:
                text: "Test"
                font_size: min(root.height, root.width)
            RstDocument:
                underline_color: 'blue'
                text:("Some Text")

Может ли быть проблема в том, что rST документы основаны на макете ScrollView случайно?

Автор: Moosez Источник Размещён: 19.07.2016 02:43

Ответы (1)


0 плюса

5834 Репутация автора

Решение

Иногда height: self.minimum_heightподобные вещи похожи на выстрел в себя. Обязательно попробуйте сначала закомментировать эти вещи, потому что, если вы не делаете что-то необычное, проблема в размерах.

Теперь, почему это проблема? StackLayoutимеет свой minimum_heightнабор from minimum_size, который установлен, я думаю, где-то здесь и имеет некоторое начальное значение, которое не равно нулю.

Не смущайтесь, хотя, в minimum_heightсамом начале по умолчанию устанавливается ноль, но затем он, вероятно, пересчитывается для каждого добавленного виджета или около того. Если вы добавите on_height: print(self.height)после height: self.minimum_height, вы поймете, что я имею в виду.

Почему это так? Просто! Вы не установили абсолютный размер для этих детей (у каждого ребенка есть size_hint == [1, 1]).

Кроме того, ScrollViewожидается , что размер больше, чем ScrollView, если я правильно помню (чтобы он прокручивался).

from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.boxlayout import BoxLayout
Builder.load_string('''
<Test>:
    orientation: 'vertical'
    ScrollView:
        size_hint: (.99, .99)
        StackLayout:
            size_hint_y: None
            id: content_layout
            height: self.minimum_height
            on_height: print(self.height)
            Label:
                size_hint: None, None
                size: 100, 30
                text: "Test"
                font_size: min(root.height, root.width)
            RstDocument:
                size_hint: None, None
                size: 100, 1000
                underline_color: 'blue'
                text:("Some Text")
''')
class Test(BoxLayout): pass
runTouchApp(Test())

Сними size_hintи sizeс детей и у тебя too much iterationтам есть.

Автор: KeyWeeUsr Размещён: 20.07.2016 01:44
Вопросы из категории :
32x32