Почему не работает HtmlLexer в питон киви?
Начал изучать питон-киви от блогера Хауди Хо, видео трехлетней давности, в компиляторе при тестировании показалась ошибка
Cannot find reference 'HtmlLexer' in '__init__.py'
что делать, как заставить код работать?
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.codeinput import CodeInput
from pygments.lexers import HtmlLexer
class MyApp(App):
def build(self):
return Button(text = 'This is my first button',
font_size=30,
on_press = self.btn_press,
background_color = [.16,.16,.14,1],
background_normal = ''
)
return CodeInput( Lexer = HtmlLexer())
def btn_press(self, instance):
print('the button was clicked')
instance.text = 'I was cliked'
if __name__ == "__main__":
MyApp().run()
Ответы (1 шт):
У меня ошибка не воспроизводится.
Основная проблема в вашем коде - работа любой функции прерывается после return, до второго return внутри метода build выполнение не доходит. В окне отобразится только кнопка, которую возвращает первый return.
Вместо нескольких return нужно элементы управления разместить внутри лэйаута, потом этот лэйаут вернуть через return. Кроме того, параметр lexer в CodeInput нужно писать с маленькой буквы.
Рабочий пример:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.codeinput import CodeInput
from kivy.uix.boxlayout import BoxLayout
from pygments.lexers import HtmlLexer
class MyApp(App):
def build(self):
root = BoxLayout(orientation="vertical")
button = Button(text = 'This is my first button',
font_size=30,
on_press = self.btn_press,
background_color = [.16,.16,.14,1],
background_normal = ''
)
root.add_widget(button)
codeinput = CodeInput( lexer = HtmlLexer())
root.add_widget(codeinput)
return root
def btn_press(self, instance):
print('the button was clicked')
instance.text = 'I was cliked'
if __name__ == "__main__":
MyApp().run()
(html скопировал из статьи википедии про html и вставил в текстовое поле для демонстрации работы подсветки)
