将文本输入保存到 kivy 应用程序中的变量
Save text input to a variable in a kivy app
我正在制作一个基于文本的游戏,游戏有时会要求用户输入他们的姓氏。我已经找到了一种将名称保存到文件并从文件中加载名称的方法,但我不知道如何将已输入的文本保存到变量中。我已经尝试了我在网上看到的各种方法,但到目前为止 none 对我有用。我有问题的代码部分目前看起来像这样:(忽略像 customwidget 这样的奇怪名称,我曾经试验过一次,然后就这样离开了:P)
testing.py 文件:
import kivy
kivy.require("1.9.0")
from kivy.properties import NumericProperty
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
class CustomWidget(Widget):
last_name_text_input = ObjectProperty()
ego = NumericProperty(0)
surname = ''
def submit_surname(self):
surname = self.last_name_text_input.text
class CustomWidgetApp(App):
def build(self):
return CustomWidget()
customWidget = CustomWidgetApp()
customWidget.run()
customwidget.kv 文件:
<CustomWidget>:
last_name_text_input: last_name
Label:
text: "Last Name:"
pos: 655,400
size: 100, 30
TextInput:
id: last_name
pos: 760,400
size: 100, 30
Button:
text: "Save Name"
pos: 870,400
size: 100, 30
on_release: root.submit_surname()
这将创建如下屏幕:
但是,每当我将姓氏值保存到文件或尝试打印姓氏时,它什么也没有出现。如果我能在这个问题上得到一些帮助,我将不胜感激。在此先感谢您的帮助:)
您必须将姓氏声明为 StringProperty。请参考下面的例子。
main.py
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty, NumericProperty, StringProperty
class CustomWidget(Widget):
last_name_text_input = ObjectProperty()
ego = NumericProperty(0)
surname = StringProperty('')
def submit_surname(self):
self.surname = self.last_name_text_input.text
print("Assign surname: {}".format(self.surname))
self.save()
self.surname = ''
print("Reset surname: {}".format(self.surname))
self.load()
print("Loaded surname: {}".format(self.surname))
def save(self):
with open("surname.txt", "w") as fobj:
fobj.write(str(self.surname))
def load(self):
with open("surname.txt") as fobj:
for surname in fobj:
self.surname = surname.rstrip()
class CustomWidgetApp(App):
def build(self):
return CustomWidget()
if __name__ == "__main__":
CustomWidgetApp().run()
customwidget.kv
#:kivy 1.10.0
<CustomWidget>:
last_name_text_input: last_name
Label:
text: "Last Name:"
pos: 655,400
size: 100, 30
TextInput:
id: last_name
pos: 760,400
size: 100, 30
Button:
text: "Save Name"
pos: 870,400
size: 100, 30
on_release: root.submit_surname()
输出
我正在制作一个基于文本的游戏,游戏有时会要求用户输入他们的姓氏。我已经找到了一种将名称保存到文件并从文件中加载名称的方法,但我不知道如何将已输入的文本保存到变量中。我已经尝试了我在网上看到的各种方法,但到目前为止 none 对我有用。我有问题的代码部分目前看起来像这样:(忽略像 customwidget 这样的奇怪名称,我曾经试验过一次,然后就这样离开了:P)
testing.py 文件:
import kivy
kivy.require("1.9.0")
from kivy.properties import NumericProperty
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
class CustomWidget(Widget):
last_name_text_input = ObjectProperty()
ego = NumericProperty(0)
surname = ''
def submit_surname(self):
surname = self.last_name_text_input.text
class CustomWidgetApp(App):
def build(self):
return CustomWidget()
customWidget = CustomWidgetApp()
customWidget.run()
customwidget.kv 文件:
<CustomWidget>:
last_name_text_input: last_name
Label:
text: "Last Name:"
pos: 655,400
size: 100, 30
TextInput:
id: last_name
pos: 760,400
size: 100, 30
Button:
text: "Save Name"
pos: 870,400
size: 100, 30
on_release: root.submit_surname()
这将创建如下屏幕:
但是,每当我将姓氏值保存到文件或尝试打印姓氏时,它什么也没有出现。如果我能在这个问题上得到一些帮助,我将不胜感激。在此先感谢您的帮助:)
您必须将姓氏声明为 StringProperty。请参考下面的例子。
main.py
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty, NumericProperty, StringProperty
class CustomWidget(Widget):
last_name_text_input = ObjectProperty()
ego = NumericProperty(0)
surname = StringProperty('')
def submit_surname(self):
self.surname = self.last_name_text_input.text
print("Assign surname: {}".format(self.surname))
self.save()
self.surname = ''
print("Reset surname: {}".format(self.surname))
self.load()
print("Loaded surname: {}".format(self.surname))
def save(self):
with open("surname.txt", "w") as fobj:
fobj.write(str(self.surname))
def load(self):
with open("surname.txt") as fobj:
for surname in fobj:
self.surname = surname.rstrip()
class CustomWidgetApp(App):
def build(self):
return CustomWidget()
if __name__ == "__main__":
CustomWidgetApp().run()
customwidget.kv
#:kivy 1.10.0
<CustomWidget>:
last_name_text_input: last_name
Label:
text: "Last Name:"
pos: 655,400
size: 100, 30
TextInput:
id: last_name
pos: 760,400
size: 100, 30
Button:
text: "Save Name"
pos: 870,400
size: 100, 30
on_release: root.submit_surname()