#python #kivy #kivy-language
#python #kivy #kivy-language
Вопрос:
У меня есть большая строка, которую мне нужно передать в мой kv-файл, чтобы я мог распечатать ее в качестве метки в конечном приложении. Единственная проблема в том, что я не знаю как. Я искал в Интернете, но не могу найти рабочее решение, которое я мог бы интегрировать в свой код.
Вот класс, содержащий строку («Имена имен» — это то, что я хочу напечатать в качестве метки):
class RecordData(Screen):
with open("Lipo names.txt") as f:
lineList = f.readlines()
lipoNames = ("".join(map(str, lineList)))
Я уже открывал файл kv вне класса с помощью конструктора, поскольку я работаю с несколькими меню. Ниже вы найдете раздел моего файла kv, где будет размещена метка:
<RecordData>
name: "record"
Label:
text: ???
font_size: (root.width**2 root.height**2) / 13**4
pos_hint:{"x": 0.325, "y": 0.86}
size_hint:0.35, 0.15
Это мой первый проект с kv, поэтому я все еще новичок в работе с файлом kv.
Спасибо за помощь!
Ответ №1:
Вы можете вызвать root.ваша переменная на языке kv (она действует как self.yourvariable), а затем в вашей функции относительного класса вызовите тип Kivy StringProperty для вашей переменной, поэтому приведение типа не требуется, и Kivy знает, как обращаться с переменной.
Попробуйте эту функцию ниже, которая обновляет текст каждый раз, когда вы нажимаете на метку:
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.app import App
from kivy.properties import StringProperty
from kivy.lang import Builder
a = """
<RecordData>
Label:
text: root.variabletext
font_size: (root.width**2 root.height**2) / 13**4
size_hint:0.35, 0.15
pos_hint:{"x": 0.325, "y": 0.86}
"""
Builder.load_string(a)
class RecordData(FloatLayout):
variabletext = StringProperty("example")
num = 0
def on_touch_down(self, touch):
self.variabletext = "We changed " str(self.num) " many times"
self.num = 1
class ExampleApp(App):
def build(self):
return RecordData()
if __name__ == '__main__':
ExampleApp().run()
Аналогичным образом вы могли бы присвоить метке идентификатор на языке KV, затем вызвать идентификатор и установить свойство text в вашей функции относительного класса python, пример ниже:
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.app import App
from kivy.lang import Builder
a = """
<RecordData>
Label:
id: variabletext
text: "example"
font_size: (root.width**2 root.height**2) / 13**4
size_hint:0.35, 0.15
pos_hint:{"x": 0.325, "y": 0.86}
"""
Builder.load_string(a)
class RecordData(FloatLayout):
num = 0
def on_touch_down(self, touch):
self.ids.variabletext.text = "We changed " str(self.num) " many times"
self.num = 1
class ExampleApp(App):
def build(self):
return RecordData()
if __name__ == '__main__':
ExampleApp().run()
Ответ №2:
В этом случае вы можете записать свой файл .kv в переменную в вашем файле python, и вы можете просто использовать f «{}» для передачи вашего примера строки
text = ""
a = f"""
<RecordData>
name: {text}
Label:
text: ???
font_size: (root.width**2 root.height**2) / 13**4
pos_hint:{"x": 0.325, "y": 0.86}
size_hint:0.35, 0.15
"""
надеюсь, это было бы полезно