不显示弹出窗口的弹出窗口散焦 - Kivy - Python

Popup Defocussing without a popup showing - Kivy - Python

在 Kivy 中构建应用程序的过程中,当标签文本对于弹出窗口的大小而言太大时,我偶然发现了弹出窗口的这种行为。

我决定我更喜欢以这种方式显示错误消息的外观,我想知道是否有办法实现这一点,但没有在错误消息下方显示弹出框?

我尝试将 size_hint 值设置为零,但这让我得到了这个

有没有办法在不显示弹出框的情况下实现主要 window 的散焦?

谢谢!

编辑

我现在已经包含了一个最小的工作示例,很抱歉之前没有这样做。

提醒一下,我正在寻找一种方法让错误消息显示为整个应用程序的覆盖层 window,但不会显示弹出窗口 window。

谢谢!

main.py

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.popup import Popup


class Example(App):

    def build(self):
        return ExampleWindow()


class ExampleWindow(Button):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.popup = MessageBox()


class MessageBox(Popup):
    pass


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

Example.kv

<ExampleWindow>:
    text: "Open Message"
    on_release: root.popup.open()

<MessageBox>:
    size_hint: 0.3, 0.3
    Label:
        font_size: 36
        text: "MESSAGE TEXT IS HERE!"

您无法自定义 Popup 小部件,但 yiu 可以使用 Popup 的 prenet 小部件创建您自己的自定义小部件,ModalView 如下面的

]

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

kv = Builder.load_string('''
Screen:
    Button:
        text:'press to see text'
        on_press:app.add_floating_label()


''')


class MyApp(App):
    view = None

    def build(self):
        return kv

    def open_floating_label(self):
        self.view = ModalView(auto_dismiss=True, size_hint=(None, None), background_color=[.1, .1, .1, 0],
                              size=(300, 75))
        self.view.add_widget(Label(text="MESSAGE TEXT IS HERE!"))
        self.view.open()
    # you can also close the view using dismiss method
    def close_floating_label(self):
        self.view.close()


MyApp().run()