我正在尝试为我的论文构建一个小应用程序,在我制作了基本的布局后,我尝试绑定一些动作。 现在我正在努力通过按提交按钮来保存一些文本输入。问题可能是我在与 .kv 文件不同的 .kv 文件中创建了文本输入网格,其中带有"提交"和"清除"按钮的状态栏位于 .kv。 一开始,我只是在按"提交"时尝试在控制台中打印文本输入。我希望你能帮助我,我认为我不应该太难,我#M只是因为编程经验的锁定而误会一些事情。
所以这是我的主要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()
我的主要基维文件
<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
和我的状态栏,其中包括按钮:
#: 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 文件,但我认为它们#对于这个问题不是必需的。 如果我运行它,该应用程序可以工作并弹出,但是一旦我添加了一些文本并点击我的"提交"按钮,我就会收到错误:"属性错误:'NoneType'abject没有属性'文本'">
我知道单独的文件可能是问题和令人困惑的,但由于这只是应用程序的开始,代码会变得更大,我想保持这种状态。我真的希望你能帮助我,因为我已经筋疲力尽了...... 谢谢!
问题是你的代码:
print("Prozess:", self.prozess.text, "Material:", self.material.text)
引用prozess
和material
好像它们是StatusBar
类的属性,但它们实际上是InputParameters
类的属性。
我还没有测试过这个,但你应该用这样的东西替换你的btn_submit()
:
def btn_submit(self):
ip = App.get_running_app().root.ids._input_parameters
print("Prozess:", ip.prozess.text, "Material:", ip.material.text)
同样,我还没有测试过这段代码,但类似的东西应该可以工作。