- Kivy 教程
- Kivy - 首页
- Kivy 基础
- Kivy - 入门
- Kivy - 安装
- Kivy - 架构
- Kivy - 文件语法
- Kivy - 应用
- Kivy - Hello World
- Kivy - 应用生命周期
- Kivy - 事件
- Kivy - 属性
- Kivy - 输入
- Kivy - 行为
- Kivy 按钮
- Kivy - 按钮
- Kivy - 按钮事件
- Kivy - 按钮颜色
- Kivy - 按钮大小
- Kivy - 按钮位置
- Kivy - 圆形按钮
- Kivy - 禁用按钮
- Kivy - 图片按钮
- Kivy 组件
- Kivy - 组件
- Kivy - 标签
- Kivy - 文本输入
- Kivy - 画布
- Kivy - 线
- Kivy - 复选框
- Kivy - 下拉列表
- Kivy - 窗口
- Kivy - 滚动视图
- Kivy - 轮播图
- Kivy - 滑块
- Kivy - 图片
- Kivy - 弹出窗口
- Kivy - 开关
- Kivy - 微调器
- Kivy - 分隔器
- Kivy - 进度条
- Kivy - 气泡
- Kivy - 标签面板
- Kivy - 散点图
- Kivy - 手风琴
- Kivy - 文件选择器
- Kivy - 颜色选择器
- Kivy - 代码输入
- Kivy - 模态视图
- Kivy - 切换按钮
- Kivy - 相机
- Kivy - 树视图
- Kivy - reStructuredText
- Kivy - 动作栏
- Kivy - 媒体播放器
- Kivy - 模板视图
- Kivy - 虚拟键盘
- Kivy - 触摸涟漪
- Kivy - 音频
- Kivy - 视频
- Kivy - 拼写检查
- Kivy - 效果
- Kivy - 输入记录器
- Kivy - OpenGL
- Kivy - 文本
- Kivy - 文本标记
- Kivy - 设置
- Kivy 布局
- Kivy - 布局
- Kivy - 浮动布局
- Kivy - 网格布局
- Kivy - 盒式布局
- Kivy - 堆叠布局
- Kivy - 锚点布局
- Kivy - 相对布局
- Kivy - 分页布局
- Kivy - 循环布局
- Kivy - 布局嵌套
- Kivy 高级概念
- Kivy - 配置对象
- Kivy - 图集
- Kivy - 数据加载器
- Kivy - 缓存管理器
- Kivy - 控制台
- Kivy - 动画
- Kivy - 多笔画
- Kivy - 时钟
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪贴板
- Kivy - 工厂
- Kivy - 手势
- Kivy - 语言
- Kivy - 图形
- Kivy - 绘图
- Kivy - 打包
- Kivy - Garden
- Kivy - 存储
- Kivy - 向量
- Kivy - 工具函数
- Kivy - 检查器
- Kivy - 工具
- Kivy - 日志记录器
- Kivy - 帧缓冲区
- Kivy 应用和项目
- Kivy - 绘图应用
- Kivy - 计算器应用
- Kivy - 计时器应用
- Kivy - 相机处理
- Kivy - 图片查看器
- Kivy - 贝塞尔曲线
- Kivy - 画布压力测试
- Kivy - 圆形绘制
- Kivy - 组件动画
- Kivy - 其他
- Kivy 有用资源
- Kivy - 快速指南
- Kivy - 有用资源
- Kivy - 讨论
Kivy - 计算器应用
本章,我们将学习如何使用 Kivy 库构建一个计算器应用程序。计算器包含每个数字和运算符的按钮。它应该有一个带有“=”标题的按钮来计算运算,还有一个按钮来清除结果。
让我们从以下设计开始:
上述布局显示顶部有一个输入框,后面跟着一个用于按钮的 3 列布局,此外,四个运算符按钮排列在一列中。
我们将使用一个只有一列的顶部网格布局,并在其下方添加一个右对齐的 TextInput,然后在其下方放置另一个两列的网格。此网格的左侧单元格包含三列的数字、“=”和“C”按钮。第二列是另一个只有一列的网格,用于所有算术运算符。
以下“kv”文件采用了此逻辑:
<calcy>: GridLayout: cols:1 TextInput: id:t1 halign:'right' size_hint:1,.2 font_size:60 GridLayout: cols:2 GridLayout: cols:3 size:root.width, root.height Button: id:one text:'1' on_press:root.onpress(*args) Button: id:two text:'2' on_press:root.onpress(*args) Button: id:thee text:'3' on_press:root.onpress(*args) Button: id:four text:'4' on_press:root.onpress(*args) Button: id:five text:'5' on_press:root.onpress(*args) Button: id:six text:'6' on_press:root.onpress(*args) Button: id:seven text:'7' on_press:root.onpress(*args) Button: id:eight text:'8' on_press:root.onpress(*args) Button: id:nine text:'9' on_press:root.onpress(*args) Button: id:zero text:'0' on_press:root.onpress(*args) Button: id:eq text:'=' on_press:root.onpress(*args) Button: id:clr text:'C' on_press:root.onpress(*args) GridLayout: cols:1 size_hint:(.25, root.height) Button: id:plus text:'+' on_press:root.onpress(*args) Button: id:minus text:'-' on_press:root.onpress(*args) Button: id:mult text:'*' on_press:root.onpress(*args) Button: id:divide text:'/' on_press:root.onpress(*args)
请注意,每个按钮在其 on_press 事件上都绑定了 onpress() 方法。
onpress() 方法基本上读取按钮标题(其 text 属性)并确定操作过程。
如果按钮的标题是数字,则将其附加到 TextInput 框的 text 属性。
self.ids.t1.text=self.ids.t1.text+instance.text
如果按钮代表任何算术运算符 (+, -, *, /),则此时文本框中的数字将存储在一个变量中以供进一步操作,并且文本框将被清除。
if instance.text in "+-*/": self.first=int(self.ids.t1.text) self.ids.t1.text='0' self.op=instance.text
如果按钮的 text 属性是“=”,则此时文本框中的数字为第二个操作数。执行相应的算术运算,并将结果显示在文本框中。
if instance.text=='=': if self.first==0: return self.second=int(self.ids.t1.text) if self.op=='+': result=self.first+self.second if self.op=='-': result=self.first-self.second if self.op=='*': result=self.first*self.second if self.op=='/': result=self.first/self.second self.ids.t1.text=str(result) self.first=self.second=0
最后,如果按钮的标题为“C”,则文本框将设置为空。
if instance.text=='C': self.ids.t1.text='' self.first=self.second=0
示例
上述“kv”文件加载到 App 类的 build() 方法中。这是完整代码:
from kivy.app import App from kivy.uix.button import Button from kivy.uix.gridlayout import GridLayout from kivy.core.window import Window Window.size = (720,400) class calcy(GridLayout): def __init__(self, **kwargs): super(calcy, self).__init__(**kwargs) self.first=self.second=0 def onpress(self, instance): if instance.text=='C': self.ids.t1.text='' self.first=self.second=0 elif instance.text in "+-*/": self.first=int(self.ids.t1.text) self.ids.t1.text='0' self.op=instance.text elif instance.text=='=': if self.first==0: return self.second=int(self.ids.t1.text) if self.op=='+': result=self.first+self.second if self.op=='-': result=self.first-self.second if self.op=='*': result=self.first*self.second if self.op=='/': result=self.first/self.second self.ids.t1.text=str(result) self.first=self.second=0 else: self.ids.t1.text=self.ids.t1.text+instance.text class calculatorapp(App): def build(self): return calcy(cols=3) calculatorapp().run()
输出
运行上述程序,并使用此应用程序执行所有基本的算术计算。
广告