如何打开带有参数的弹出窗口
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 它是不可访问的,这不是您想要的。我对 .py
和 error.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: ''
它对我来说非常好,应该也对你有用!
我正在尝试打开带有特定参数(错误类型)的弹出消息,以在弹出消息中定义应显示的文本。
我用单独的 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 它是不可访问的,这不是您想要的。我对 .py
和 error.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: ''
它对我来说非常好,应该也对你有用!