Kivy Binding Textinput to Submit Button gives AttributeError: 'NoneType' object has no attribute 'text'
Kivy Binding Textinput to Submit Button gives AttributeError: 'NoneType' object has no attribute 'text'
我正在尝试为我的论文构建一个小应用程序,在完成基本布局后,我尝试绑定一些操作。
现在我正在努力通过按下提交按钮来保存一些 TextInputs。问题可能是我在与带有按钮 'Submit' 和 'Clear' 的 StatusBar 所在的 .kv 文件不同的 .kv 文件中创建了 TextInput Grid。
一开始我只是想在按下 'Submit' 时在我的控制台中打印 TextInput。我希望你能帮助我,我想我不应该太难,我只是因为编程经验的限制而错过了一些东西。
所以这是我的主要 python 文件:
import kivy
from kivy.app import App
from kivy.uix.button import Label
from kivy.uix.widget import Widget
from kivy.uix.textinput import TextInput
from kivy.lang import Builder
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
Builder.load_file('Header.kv')
Builder.load_file('Statusbar.kv')
Builder.load_file('Inputparameters.kv')
Builder.load_file('Outputparameters.kv')
class Peenomat(AnchorLayout):
pass
class PeenomatApp(App):
def build(self):
return Peenomat()
if __name__=="__main__":
PeenomatApp().run()
我的主要 Kivy 文件
<Peenomat>
AnchorLayout:
anchor_x: 'left'
anchor_y: 'bottom'
GridLayout:
cols: 1
canvas.before:
Color:
rgba: 0.75 ,0.75, 0.75, 1
Rectangle:
pos: self.pos
size: self.size
Header:
id: _header
size_hint: 1, 0.1
#height: 100
InputParameters:
id:_input_parameters
size_hint: 1, 0.45
#height: root.height - _status_bar.height #-_header.height
StatusBar:
id:_status_bar
size_hint: 1, 0.1
#height: 50
OutputParameters:
id:_output_parameters
size_hint: 1, 0.35
我输入必要文本的字段,每个字段都分配了 id
<InputParameters@GridLayout>
prozess: _prozess
material: _material
haerte: _haerte
rauheit: _rauheit
cols: 2
padding: 15
#Prozess
Label:
text:'Prozess:'
TextInput:
id: _prozess
hint_text:'Text'
multiline: False
#Material
Label:
text:'Material:'
TextInput:
id: _material
hint_text:'Text'
multiline: False
# Haerte
Label:
text:'Haerte:'
TextInput:
id: _haerte
hint_text:'Text'
multiline: False
# Rauheit
Label:
text:'Rauheit:'
TextInput:
id: _rauheit
hint_text:'Text'
multiline: False
和我的包含按钮的 StatusBar:
#: import statusbar StatusBar
<StatusBar@BoxLayout>
orientation:'horizontal'
padding: 5
fs: 16
Button:
text: 'Clear'
background_color: 0.0, 0.353, 0.663, 1.0
size_hint: 0.4, 1
font_size: 20
Button:
text: 'Submit'
background_color: 0.0, 0.353, 0.663, 1.0
size_hint: 0.4, 1
font_size: 20
on_press: root.btn_submit()
状态栏用于打印文本输入的按钮方法的导入 py.- 文件如下:
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
class StatusBar(BoxLayout):
group_mode = False
#translation = ListProperty(None)
prozess = ObjectProperty(None)
material = ObjectProperty(None)
haerte = ObjectProperty(None)
rauheit = ObjectProperty(None)
def btn_submit(self):
print("Prozess:", self.prozess.text, "Material:", self.material.text)
main.py 中提到了另外 2 个 .kv 文件,但我不认为它们#re 是该问题所必需的。
如果我 运行 应用程序工作并弹出,但是一旦我添加一些文本并点击我的 'Submit' 按钮我得到错误:“AttributeError: 'NoneType' abject has no attribute 'text'"
我知道单独的文件可能是问题所在并且令人困惑,但因为这只是应用程序的开始,代码会变得更大我想保持这种状态。我真的希望你能帮助我,因为我很沮丧......
谢谢!
问题是你的代码:
print("Prozess:", self.prozess.text, "Material:", self.material.text)
引用 prozess
和 material
就好像它们是 StatusBar
class 的属性一样,但它们实际上是 InputParameters
[= 的属性25=].
我还没有测试过这个,但是你应该用类似的东西替换你的 btn_submit()
:
def btn_submit(self):
ip = App.get_running_app().root.ids._input_parameters
print("Prozess:", ip.prozess.text, "Material:", ip.material.text)
同样,我还没有测试过这段代码,但类似的东西应该可以工作。
我正在尝试为我的论文构建一个小应用程序,在完成基本布局后,我尝试绑定一些操作。 现在我正在努力通过按下提交按钮来保存一些 TextInputs。问题可能是我在与带有按钮 'Submit' 和 'Clear' 的 StatusBar 所在的 .kv 文件不同的 .kv 文件中创建了 TextInput Grid。 一开始我只是想在按下 'Submit' 时在我的控制台中打印 TextInput。我希望你能帮助我,我想我不应该太难,我只是因为编程经验的限制而错过了一些东西。
所以这是我的主要 python 文件:
import kivy
from kivy.app import App
from kivy.uix.button import Label
from kivy.uix.widget import Widget
from kivy.uix.textinput import TextInput
from kivy.lang import Builder
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
Builder.load_file('Header.kv')
Builder.load_file('Statusbar.kv')
Builder.load_file('Inputparameters.kv')
Builder.load_file('Outputparameters.kv')
class Peenomat(AnchorLayout):
pass
class PeenomatApp(App):
def build(self):
return Peenomat()
if __name__=="__main__":
PeenomatApp().run()
我的主要 Kivy 文件
<Peenomat>
AnchorLayout:
anchor_x: 'left'
anchor_y: 'bottom'
GridLayout:
cols: 1
canvas.before:
Color:
rgba: 0.75 ,0.75, 0.75, 1
Rectangle:
pos: self.pos
size: self.size
Header:
id: _header
size_hint: 1, 0.1
#height: 100
InputParameters:
id:_input_parameters
size_hint: 1, 0.45
#height: root.height - _status_bar.height #-_header.height
StatusBar:
id:_status_bar
size_hint: 1, 0.1
#height: 50
OutputParameters:
id:_output_parameters
size_hint: 1, 0.35
我输入必要文本的字段,每个字段都分配了 id
<InputParameters@GridLayout>
prozess: _prozess
material: _material
haerte: _haerte
rauheit: _rauheit
cols: 2
padding: 15
#Prozess
Label:
text:'Prozess:'
TextInput:
id: _prozess
hint_text:'Text'
multiline: False
#Material
Label:
text:'Material:'
TextInput:
id: _material
hint_text:'Text'
multiline: False
# Haerte
Label:
text:'Haerte:'
TextInput:
id: _haerte
hint_text:'Text'
multiline: False
# Rauheit
Label:
text:'Rauheit:'
TextInput:
id: _rauheit
hint_text:'Text'
multiline: False
和我的包含按钮的 StatusBar:
#: import statusbar StatusBar
<StatusBar@BoxLayout>
orientation:'horizontal'
padding: 5
fs: 16
Button:
text: 'Clear'
background_color: 0.0, 0.353, 0.663, 1.0
size_hint: 0.4, 1
font_size: 20
Button:
text: 'Submit'
background_color: 0.0, 0.353, 0.663, 1.0
size_hint: 0.4, 1
font_size: 20
on_press: root.btn_submit()
状态栏用于打印文本输入的按钮方法的导入 py.- 文件如下:
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
class StatusBar(BoxLayout):
group_mode = False
#translation = ListProperty(None)
prozess = ObjectProperty(None)
material = ObjectProperty(None)
haerte = ObjectProperty(None)
rauheit = ObjectProperty(None)
def btn_submit(self):
print("Prozess:", self.prozess.text, "Material:", self.material.text)
main.py 中提到了另外 2 个 .kv 文件,但我不认为它们#re 是该问题所必需的。 如果我 运行 应用程序工作并弹出,但是一旦我添加一些文本并点击我的 'Submit' 按钮我得到错误:“AttributeError: 'NoneType' abject has no attribute 'text'"
我知道单独的文件可能是问题所在并且令人困惑,但因为这只是应用程序的开始,代码会变得更大我想保持这种状态。我真的希望你能帮助我,因为我很沮丧...... 谢谢!
问题是你的代码:
print("Prozess:", self.prozess.text, "Material:", self.material.text)
引用 prozess
和 material
就好像它们是 StatusBar
class 的属性一样,但它们实际上是 InputParameters
[= 的属性25=].
我还没有测试过这个,但是你应该用类似的东西替换你的 btn_submit()
:
def btn_submit(self):
ip = App.get_running_app().root.ids._input_parameters
print("Prozess:", ip.prozess.text, "Material:", ip.material.text)
同样,我还没有测试过这段代码,但类似的东西应该可以工作。