RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 586396
Accepted
Svyatoslav Nenashev
Svyatoslav Nenashev
Asked:2020-11-03 20:50:10 +0000 UTC2020-11-03 20:50:10 +0000 UTC 2020-11-03 20:50:10 +0000 UTC

kv 文件无法启动 (kivy)

  • 772

刚开始使用 kivy 并决定使用他们的语言。但是 kv 文件没有启动,尽管我读到它实际上不需要做任何事情就可以工作。也许我误解了什么,告诉我。

from kivy.app import App
from kivy.uix.label import Label


class MessageApp(App):
    def Build(self):
        return Label()


MessageApp().run()

我知道您需要 4 个空格作为文本。这种平庸的任务没有其他要求。也没有关于文件无法启动这一事实的错误。我正在使用 Pycharm,kivy 本身已安装 (debian),并且所有方法都有效。

<Label>
   text:"hello world!"

PS gui 本身启动,由于某种原因没有获取 kv 文件。

python
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Xyanight
    2020-11-05T01:53:14Z2020-11-05T01:53:14Z

    你所做的一切都是错误的!从 App 继承的主类应该包含一个构建方法并返回某种小部件!所以在这种情况下关于 kv 文件的问题根本不合适!

    from kivy.app import App 
    from kivy.uix.boxlayout import BoxLayout 
    from kivy.lang import Builder 
    from kivy.properties import StringProperty 
    
    
    Builder.load_string(''' 
    #: import MDFlatButton kivymd.button.MDFlatButton 
    
    # Данные инструкции в Kivy-Language аналогичны импорту в python сценариях: 
    # from kivymd.button import MDFlatButton 
    # 
    # В kv-файле вы можете включать другие файлы разметки, 
    # если интерфейс, например, слишком сложный: #: include your_kv_file.kv 
    #
    # Стандартные виджеты и контроллы, предоставляемые Kivy из коробки,
    # не нужно импортировать в Activity — просто используйте их.
    
    # Все элементы данного Activity будут располагаться в BoxLayout - 
    # виджете, от которого унаследован базовый класс. 
    <StartScreen> 
    
        MDFlatButton: 
            id: button 
            text: 'Press Me' 
            size_hint_x: 1  # относительная ширина контролла - от 0 до 1 
            pos_hint: {'y': .5}  # положение контролла относительно вертикали 'y' корневого виджета 
    
            # Событие контролла. 
            on_release: 
                # Ключевое слово 'root' - это инстанс базового класса разметки, 
                # через который вы можете получить доступ ко всем его методам и атрибутам. 
                root.set_text_on_button() 
    ''') 
    # Или Builder.load_file('path/to/kv-file'), 
    # если разметка Activity находится в файле. 
    
    
    class StartScreen(BoxLayout): 
        '''Базовый класс.''' 
    
        new_text_for_button = StringProperty() 
        # В Kivy вы должны явно указывать тип атрибутов: 
        # 
        # StringProperty; 
        # NumericProperty; 
        # BoundedNumericProperty; 
        # ObjectProperty; 
        # DictProperty; 
        # ListProperty; 
        # OptionProperty; 
        # AliasProperty; 
        # BooleanProperty; 
        # ReferenceListProperty; 
        # 
        # в противном случае вы получите ошибку 
        # при установке значений этих атрибутов. 
        # 
        # Например, если не указывать тип: 
        # 
        # new_text_for_button = '' 
        # 
        # будет возбуждено исключение - 
        # TypeError: object.__init__() takes no parameters. 
    
        def set_text_on_button(self): 
            self.ids.button.text = self.new_text_for_button 
            # ids - это словарь всех объектов Activity 
            # которым назначен идентификатор. 
            # 
            # Так, обратившись через идентификатор 'button' - self.ids.button - 
            # к объекту кнопки, мы получаем доступ 
            # ко всем его методам и атрибутам. 
    
        # Любой атрибут, инициализировванный как Properties, 
        # автоматически получает метод в базовом классе с префиксом 'on_', 
        # который будет вызван как только данный атрибут получит новое значение. 
        def on_new_text_for_button(self, instance, value): 
            print(instance, value) 
    
    
    class Program(App): 
        def build(self): 
            '''Метод, вызываемый при старте программы. 
            Должен возвращать объект создаваемого Activity.''' 
    
            return StartScreen(new_text_for_button='This new text') 
    
    
    if __name__ in ('__main__', '__android__'): 
        Program().run()  # запуск приложения
    

    特别是在您的示例中...您创建了一个活动(kv 文件),它应该有一个与您的标记模板同名的基类:

    from kivy.app import App
    from kivy.lang import Builder
    
    
    Builder.load_string('''
    <MyActivity>:
        Label:
            text:"hello world!
    ''')
    
    
    class MyActivity(BoxLayout):
        pass
    
    
    class Test(App):
        def build(self):
            return MyActivity()
    
    
    Test().run()
    

    或者没有基类:

    from kivy.app import App
    from kivy.lang import Builder
    
    
    Activity = '''
    <MyActivity@BoxLayout>:
        Label:
            text:"hello world!
    '''
    
    
    class Test(App):
        def build(self):
            return Builder.load_string(Activity)
    
    
    Test().run()
    

    https://habrahabr.ru/users/heattheatr/topics/ - 关于 Kivy 开发的博客。

    • 1
  2. titov_andrei
    2020-11-04T06:29:17Z2020-11-04T06:29:17Z

    主程序

    from kivy.app import App
    
    
    class MessageApp(App):
        pass
    
    if __name__ == '__main__':
        MessageApp().run()
    

    消息.kv

    Label:
       text:"hello world!"
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5