Python + Kivy(KivyMD) запуск функции из класса при старте не работает
Я пытаюсь присвоить текст лейблу у которого id:news_main
Через кнопку РАБОТАЕТ!
А в Автомате при запуске, нет(
Дело еще в том, что более адекватного виджета для "раздвижения" текста я не нашел, MDExpansionPanel активируется при старте через MDBoxLayout "id: Box"
Я пробовал разные методы, но в некоторых немного не догоняю. Попытался News().test() работает, но Лейблу текст не присваивает почему-то((
Я хочу, чтоб при старте, текст взяло из файла, обработало, создало MDExpansionPanel. и когда приложение уже запущенно к news_main.text уже должен быть присвоен текст из файла.
from kivymd.app import MDApp
from kivymd.uix.expansionpanel import MDExpansionPanel, MDExpansionPanelThreeLine
from kivymd.uix.gridlayout import MDGridLayout
news_Main_str = []
class News(MDGridLayout):
def test(self):
with open('news/3News_Main.txt', 'r') as news_Main:
read_News_Main = news_Main.readlines()
for i in range(len(read_News_Main)):
news_Main_str.append(read_News_Main[i])
ready_Main_str = ' '.join(news_Main_str)
print(ready_Main_str)
self.ids.news_main.text = ready_Main_str
print('hello')
class Test2(MDApp):
def build(self):
return
def on_start(self):
self.root.ids.box.add_widget(
MDExpansionPanel(
icon="news/Logo.png",
content=News(),
panel_cls=MDExpansionPanelThreeLine(
text="Development",
secondary_text="43166",
tertiary_text="пн, 14 февраля",
)
)
)
News().test() # Думал так сработает, но нет!
Test2().run()
test2.kv
<News>
cols: 1
padding: 5, 0, 5, 0
md_bg_color: 0.235, 0.247, 0.254, 1
size_hint_y: None
height: "250dp"
ScrollView:
MDBoxLayout:
cols: 1
spacing: dp(55)
orientation: 'vertical'
adaptive_height: True
MDBoxLayout:
cols: 1
size_hint: 1, None
orientation: 'vertical'
MDLabel: # 103
id: news_main
adaptive_height: True
text: "Мне нужно поменять этот текст НЕ НА КНОПКУ, А в АВТОМАТЕ (При старте)"
theme_text_color: "Custom"
text_color: 0.811, 0.823, 0.827, 1
MDBoxLayout: # Кнопка для теста
cols: 1
size_hint: 1, None
orientation: 'vertical'
Button:
on_press: root.test()
MDScreen:
md_bg_color: 0.964, 0.164, 0.164, 1
ScreenManager:
id: screen_manager
MDScreen:
name: "scr1"
#--------------------<News>--------------------
MDGridLayout: # Раздвижной Блок новостей
id: box
cols: 1
adaptive_height: True
md_bg_color: 0.235, 0.247, 0.254, 1
#--------------------<News>--------------------
Пример текста 3News_Main.txt
Дорога к другу. Воспоминание юности
Вадим Бакулин
Холодный двадцать пятый отпыхтел.
Я вышел на последней остановке.
Как благородно вечер поседел!
Светло и тихо на твоей "Рублёвке".
Пока до дома твоего дойдёшь,
Мороз январский о себе заявит,
Пощиплет нос и щёки, ну так что-ж,
Крещенье этой ночью наступает!
Сугробов горы создают уют,
А звёзды смотрят пристально и строго.
Я повернул на линию твою, -
Меня узнала белая дорога!
Пусть ветер надрывается опять, -
Всё серебрится, всё вокруг сверкает!
Знакомый силуэт вдали мелькает:
Мой лучший друг идёт меня встречать!
(Кодировка может подвести.)
Ответы (2 шт):
Не совсем понятно что нужно сделать, но попробуйте в методе build вызвать ту функцыю которая работает по кнопке, тогда при старте должно сработать автоматически:
def build(self):
News().test()
return
И обратите внимание, вы запускаете класс Test2, а файл кв начинается с <News>
class News(MDGridLayout):
text = StringProperty(self.test)
def test(self):
with open('news/3News_Main.txt', 'r') as news_Main:
read_News_Main = news_Main.readlines()
return ' '.join(news_Main_str)
В КВ файле пропишите свойство для вашего лейбла text: root.text. Должно сработать автоматически