0

ウィジェットのセットを ModalView に追加しkivyて、モーダル ウィンドウがすべてのコンテンツに動的に収まるようにする適切な方法は何ですか?

次のスクリプト例があります。

#!/usr/bin/env python3

import kivy
from kivy.uix.modalview import ModalView
from kivy.lang import Builder
from kivy.app import App

KV = """
BoxLayout:
    ModalView:
        size_hint: 0.9, None

        BoxLayout:
            orientation: 'vertical'

            Label:
                text: 'Dialog Title'
                font_size: 30

            Label:
                text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
            Label:
                text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
            Label:
                text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
            Label:
                text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

            StackLayout:
                orientation: 'rl-tb'

                Button:
                    text: "OK"
                    size_hint: None, None
                    size: self.texture_size
                    padding: '8dp', '8dp'

                Button:
                    text: "Cancel"
                    size_hint: None, None
                    size: self.texture_size
                    padding: '8dp', '8dp'
"""

class MyApp(App):
    def build(self):
        return Builder.load_string( KV )


MyApp().run()

kivy langauge が説明しているように、モーダルをアプリの幅 90% で表示し、モーダルのすべてのコンテンツに合わせて高さを動的に調整する必要があります。

モーダルのコンテンツは、その下に一連の「本文」ラベルを持つ「タイトル」ラベルにする必要があります。これらのラベルの下には、同じ行に表示される 2 つのボタンがあります。かなり簡単です。

しかし、これは私が得るものです:

Kivyモーダルビューでウィジェットが正しく表示されない

上の画像が示していることに注意してください。

  1. ボタンはほとんどモーダルの外にあります
  2. タイトル ラベルは部分的に下のラベルの上にあります (これは BoxLayout の動作方法ではありません)。
  3. タイトル ラベルも部分的にモーダルの外側にあります

モーダルのコンテンツが期待どおりに表示されるように、このスクリプトを修正するにはどうすればよいですか?

4

2 に答える 2

0

ウィジェットの子にせずに を構築するkv方法を説明するルールを に入れることができます。ドキュメントModalViewを参照してください。次のようなルールを使用できます。

<MyModal@ModalView>:

    BoxLayout:
        orientation: 'vertical'

        Label:
            text: 'Dialog Title'
            font_size: 30

        Label:
            text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
        Label:
            text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
        Label:
            text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
        Label:
            text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

        StackLayout:
            orientation: 'rl-tb'

            Button:
                text: "OK"
                size_hint: None, None
                size: self.texture_size
                padding: '8dp', '8dp'

            Button:
                text: "Cancel"
                size_hint: None, None
                size: self.texture_size
                padding: '8dp', '8dp'

次に、Python コードで、次のModalViewように作成します。

from kivy.factory import Factory
modal_inst = Factory.MyModal()
modal_inst.open()
于 2020-09-03T14:07:14.177 に答える