如何打开带有参数的弹出窗口

How to open a popup with an argument

我正在尝试打开带有特定参数(错误类型)的弹出消息,以在弹出消息中定义应显示的文本。

我用单独的 class (ErrorPopUp) 尝试过,但我无法使用参数调用弹出方法。

"'ErrorPopup' 对象没有属性 'errortype'"

这应该是一个可重现的例子。

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty


class MainWindow(Screen):

    float_weight = ObjectProperty(None)

    def btn(self):
        try:
            float_weight = float(self.float_weight.text.replace(',', '.'))
        except:
            ErrorPopup().ErrorMessage('errorweight')

class ErrorPopup(Popup):
    kv = Builder.load_file("error.kv")
    def ErrorMessage(self, errortype):
        Popup.open(self)


class WindowManager(ScreenManager):
    pass


class MyMainApp(App):
    def build(self):
        return kv


if __name__ == '__main__':
    kv = Builder.load_file("my.kv")
    MyMainApp().run()

my.kv:

WindowManager:
    MainWindow:

<MainWindow>:
    name: "main"

    float_weight: float_weight

    GridLayout:
        cols:1

        GridLayout:
            cols:2

            Label:
                text: "Gewicht:"

            TextInput:
                id: float_weight
                multiline: False

        Button:
            text: "Test3"
            on_press:root.btn()

error.kv:

<ErrorPopup>:
    title: 'Fehlerhafte Eingabe'
    size_hint: (None, None)
    size: (400, 400)
    Label:
        text: root.errortype

在你的error.kv中,你运行text: root.errortype。 kivy 理解的是 ErrorPopup class 中有一个变量,但是 return 是一个错误,因为它根本不存在。该变量位于函数 ErrorMessage() 内,除非您 return 它是不可访问的,这不是您想要的。我对 .pyerror.kv 文件的建议是:

.py

class ErrorPopup(Popup):
    kv = Builder.load_file("error.kv")
    def ErrorMessage(self, errortype):
        self.ids.LABEL.text = errortype
        Popup.open(self)

error.kv

<ErrorPopup>:
    title: 'Fehlerhafte Eingabe'
    size_hint: (None, None)
    size: (400, 400)
    Label:
        id: LABEL
        text: ''

它对我来说非常好,应该也对你有用!