kivy基本程序结构

简介: 介绍kivy程序的基本架构,可以帮助初学者快速掌握一般性写法。

创建一个程序

kivy.require('1.9.0') # replace with your current kivy version !
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
    def build(self):
        return Label(text='Hello world')
if __name__ == '__main__':
MyApp().run()

每个程序都必须要有一个继承自kivy.app.App的类,类名决定程序名称,程序的入口为App类的run方法。
kivy.app包含程序消息循环、内存管理、进程管理等类;kivy.uix包含基于widget和layout的各种控件。代码第一行指明需要的kivy版本,这句可以省略。
继承app类的MyApp的build方法用于返回根控件root widget(这类似于qt的顶层窗口,是一个程序中一切其他控件的顶层控件)。最后在主代码里运行程序。
一个标准程序结构
下面的代码展示一个相对于上面更加具有一般特征的结构,在以后的代码里一般都以这个结构为基础。

#coding:u8
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
class MyWidget(GridLayout):
    def __init__(self,**kw):
        super(MyWidget,self).__init__(**kw)
        self.cols = 2
        self.laba = Label(text='grid one')
        self.add_widget(self.laba)
        self.labb = Label(text='grid two')
        self.add_widget(self.labb)
class MyApp(App):
    def build(self):
        return MyWidget()
if __name__ == '__main__':
MyApp().run()

上面的代码包含了控件widget、布局layout,将根控件独立为一个类,这样控件初始化更加直观。
控件以控件树的方式组织,树的顶端是根控件,控件树通过add_widget增加控件、remove_widget删除控件、clear_widgets删除全部控件这几个方法来操作。比如按照上面的代码:
self.add_widget(self.laba)
self.remove_widget(self.laba)
self.clear_widgets()
遍历控件树,所有的子控件都以列表的形式存储在根控件的children属性里。

w = MyWidget()
for child in w.children:
    print child

如果你要修改控件树中的控件,那么应该使用控件树的副本

for child in w.children[:]:
    w.remove_widget(child)

控件绘制顺序(Z索引)
控件一般按照初始化顺序来绘制,可以通过修改Z索引来改变。
w.add_widget(widget,index)

相关文章
|
28天前
|
设计模式 测试技术 开发者
Python中的装饰器:提升代码复用与模块化的艺术
本文将带你领略Python装饰器的魔力,探索如何通过装饰器来增强函数功能而不修改其代码。我们将从装饰器的基础概念出发,逐步深入到如何在实际项目中应用装饰器,以及如何编写自定义装饰器。文章最后,我们将通过一个实例,展示装饰器在日志记录和性能测试中的应用,让你的代码更加模块化和可重用。
WK
|
1月前
|
测试技术 开发者 Python
python模块化设计
Python的模块化设计支持开发者将代码拆分成独立模块,提升代码的可读性、可维护性和复用性。通过`.py`文件定义模块,并利用`import`语句导入所需功能,同时可通过包含`__init__.py`的目录创建包以组织多个模块。Python按特定顺序搜索模块,支持修改`sys.path`添加自定义路径。此外,支持相对与绝对导入方式,便于灵活使用模块资源。遵循良好的编程习惯有助于开发高质量的可复用模块,而虚拟环境与依赖管理工具则确保项目间的依赖隔离,进一步增强项目的稳定性和可扩展性。
WK
19 2
|
1月前
|
缓存 测试技术 Python
探索Python中的装饰器:提升代码复用与模块化的艺术
在Python的世界里,装饰器是一种强大的工具,它允许我们以非侵入性的方式增强函数或方法的功能。本文将带你深入了解装饰器的内部机制,并通过实际案例展示如何利用装饰器来提升代码的复用性和模块化。
|
3月前
|
前端开发 Python 容器
Python+Dash快速web应用开发:静态部件篇(下)
Python+Dash快速web应用开发:静态部件篇(下)
关于Qt的pri模块化编程详解
关于Qt的pri模块化编程详解
|
4月前
|
开发者 Python
Python模块化编程实践指南
【7月更文挑战第20天】在Python开发中,模块化编程是一种重要的方法,它能够提高代码的可维护性、可读性和可重用性。本文将介绍Python模块化编程的基本概念,并通过一些实例演示如何有效地使用模块化编程。
106 0
|
6月前
|
测试技术 Python
Python模块化方式编程实践
【5月更文挑战第5天】Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
81 2
|
前端开发 数据可视化 搜索推荐
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
459 0
|
6月前
|
API 开发工具 C++
Python图形用户界面(GUI)编程:大解密
Python图形用户界面(GUI)编程:大解密
369 0
|
程序员 Python
Python Qt GUI设计:5种事件处理机制(提升篇—3)
之前在Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)中,我们已经简单讲到,PyQt为事件处理提供了两种机制:高级的信号与槽机制以及低级的事件处理程序,本篇博文将系统讲解Qt的事件处理机类和制。
下一篇
无影云桌面