PyQt简单的计算器实例讲解
来源:互联网 发布:windows安全性登录 编辑:程序博客网 时间:2024/06/10 22:47
#coding=utf8from __future__ import division #导入除法方法,返回标准值'''这个例子是一个对话风格(dialog-style)的应用程序。对话框风格(dialog-style)意味着该应用程序:没有菜单条、工具条或者状态条、只带有一些按钮、也不存在中心widget。相反,“main window-style(主窗口风格)”应用通常包含如下:菜单条、工具条、状态条、实例按钮、一个中心widget(包含其他widget)。这个应用使用两个widgets:一个QTextBrowser----只读的多行文本显示框,用来显示纯文本和HTML一个QLineEdit-----单行文本框,用来显示纯文本在PyQt widgets的所有文本编码格式默认都是Unicode,当需要时可以转换成其他编码格式。本例是个计算机实例:可以像任何GUI应用一样,通过点击(或者双击这取决于平台与设置)它的图标运行。也能通过在控制台启动。一旦程序运行,用户仅仅可以输入数学计算表达到行编辑中,输入完成按回车(Enter或者Return),表达式和计算结果会被添加到QTextBrowser中。当输入无效的表达式或无效的数学运算(例如除零),都会抛出异常,返回错误信息,并把错误信息显示在QTextBrowser中。该示例遵循该模式,将用于所有未来的GUI应用程序:一个form代表一个类、用户交互行为响应作为方法、main是程序最小的部分。在大部分案例中,当用户创建一个顶级(top-level)窗口,该窗口可能是QDialog/QMainWindow/QWidget的子类。QDialog、QMainWindow与PyQt中所有的widget都源于QWidget。使用layout的重要原因之一是:PyQt自动为widget进行布局。尽管在这个实例没有给widget父级,当调用setLayout(),布局管理器将自己小部件的所有权归属于form,并拥有任何嵌套布局本身所有权。这意味着没有布局的小部件是一个顶级窗口。当form被删除时,它的所有子widget和layout也会被以正确的顺序删除。''''''对象所属关系:所有PyQt类都源于QObject,QObject包含所有的widgets,因为QWidget是QObject的子类----可以有一个“parent”。这父子关系用做互补的目的。一个没有父级的widget是一个顶级窗口。一个有父级(通常是另一widget)的widget通常被包含(显示)在它的父级widget中。这种关系被定义为所属关系,父级拥有自己的孩子。PyQt使用父子所属模型来确保。如果父级(一个顶级窗口)被删除,它的所有孩子(窗口包含的所有widget)会自动被删除。为了避免内存泄漏,要确保任何QObject包括所有的QWidget都有一个parent,唯一的例外是顶级窗口。大部分PyQt QObject子类都有构造函数,以一个parent对象作为他们的最后(可选的)参数。但是因为widgets通常不或不需要传递这参数。这是因为对话框中使用的小部件是通过布局管理器布局,当这种情况发生时,它们是自动的反映在他们被布局的小部件上,所以他们最终得到了正确的父母,不要求我们采取任何特别的行动。但由于一些事件,必须明确传递parent-例如当构造一个QObject子类对象,该对象不是一个widget,或者是widget但不被布局(例如dock widget)。最后一点是有可能得到一个Python变量的情况是指不再存在的底层PyQt对象。resize():给定widget的绝对大小setFocus():设置焦点connect():move():给定widget的绝对位置'''import sys #为了获得sys.argv列表from math import * #需要一些算术操作需要导入包from PyQt4.QtCore import *from PyQt4.QtGui import *#创建一个继承QDialo的Form类class Form(QDialog): ''' 通过继承QDialog可以获得一个空白的form, form是一个灰色矩形、一些方便的属性和方法。 例如用户点击X按钮,对话框关闭。 一般,当一个widget被关闭,该widget将完全被隐藏 ''' def __init__(self,parent=None): ''' 创建一个Form类的__init__()方法,并设置一个参数parent,默认为None, 用super()方法初始化它。 没有父级(parent)的小部件(widget)成为顶级窗口,这是用户想要的form。 需要创建两个小部件并继续引用它们,以便以后在外面访问它们的__init __()。 由于没有给widget父级,这些widget仿佛变成了顶级窗口。 这些widget在初始化之后获得了父级。 ''' super(Form,self).__init__(parent) ''' 一旦运行应用并重置大小,页面中额外的垂直空间被QTextBrowser占据, 这个应用的widget将水平增长。这是通过布局管理器自动处理的。 ''' self.browser=QTextBrowser() #给QLineEdit一些初始化显示的文本 self.lineedit=QLineEdit("Type an expression and press Enter") #选则QLineEdit中的文本信息 #这方便用户输入,这些文本信息很容易重写 self.lineedit.selectAll() #创建一个垂直布局盒子 layout=QVBoxLayout() #把之前创建的两个空间加到垂直布局盒子里 layout.addWidget(self.browser) layout.addWidget(self.lineedit) #把layout放入form中 self.setLayout(layout) #设置焦点 self.lineedit.setFocus() self.connect(self.lineedit,SIGNAL("returnPressed()"),self.updateUi) self.setWindowTitle("Calculate") def updateUi(self): try: #转码为unicode码 text = unicode(self.lineedit.text()) #把文本信息添加大量QTextBroswer中 #通过使用eval(),避免了解析和错误检查的所有工作 self.browser.append("%s = <b>%s</b>" % (text, eval(text))) except: #把文本信息添加大量QTextBroswer中 self.browser.append( "<font color=red>%s is invalid!</font>" % text)app = QApplication(sys.argv)form = Form()form.show()app.exec_()
运行结果:
0 0
- PyQt简单的计算器实例讲解
- PyQt实战之计算器的实现
- JS简单计算器实例
- 计算器简单实例
- 一个简单的struts 2实例讲解
- 反射简单讲解实例
- 触发器简单实例讲解
- PHP.10-PHP实例(一)-简单的计算器
- 第一个PyQt项目,一个计算器的实现
- PyQt运行程序的单个实例
- android简单实例---------SharedPreferences的简单使用与讲解
- PyQt开发讲解
- PyQt开发讲解
- 简单工厂模式之简单计算器实例
- 最简单的pyqt打包流程
- pyqt一个简单的计划管理程序
- PyQt写的简单图像标注工具
- 简单的四则计算器
- win7运行第一个opencv程序,基于opencv3.2,官方vc14编译版本,QT5.8 VS2015平台
- bootstrap switch 使用笔记
- Freedom Trail
- Android NDK开发之C调用Java及原生代码断点调试(二)
- 获取客户端IP方案
- PyQt简单的计算器实例讲解
- 2017 5 8每周总结
- HTML5 & AngularJS学习
- UIWindow(获取当前Viewcontroller)
- 一天搞定HTML----列表标签03
- Glide和Picasso的简单比较
- ffmpeg gpu(nvida_cuda)加速
- Win Server 2003 P2V迁移方法
- Java基础之面向对象基础知识整理——类和对象