用pyqt5设计一个简单的计算器,pyqt5实现计算器
#编码=utf8
from __future__ import division #导入除法方法并返回标准值。
这个例子是一个对话框风格的应用程序。
对话式意味着应用程序:
没有菜单栏、工具栏、状态栏,只有一些按钮,没有中央小部件。
相反,“主窗口风格”的应用程序通常包括以下内容:
菜单、工具栏、状态栏、实例按钮和一个中央小部件(包括其他小部件)。
这个应用程序使用两个小部件:
一个只读的多行文本显示框,用于显示纯文本和HTML。
用于显示纯文本的QLineEdit -单行文本框。
默认情况下,PyQt小部件中的所有文本编码格式都是Unicode,
必要时可以转换成其他编码格式。
这个例子是一个计算机例子:
像任何GUI应用程序一样,它可以通过单击(或双击,取决于平台和设置)其图标来运行。
它也可以从控制台启动。
一旦程序运行,用户只能输入数学计算,并在行编辑中表达出来,
输入并按Enter(回车或返回),表达式和计算结果将被添加到QTextBrowser中。
当输入无效的表达式或无效的数学运算(如除以零)时,将引发异常,
错误信息被返回并显示在QTextBrowser中。
该示例遵循这一模式,并将用于所有未来的GUI应用程序:
一个表单代表一个类,用户交互行为的响应是一个方法,main是程序的最小部分。
在大多数情况下,当用户创建顶层窗口时,该窗口可能
QDialog/QMainWindow/QWidget的子类。
QDialog、QMainWindow和PyQt中的所有小部件都是从QWidget派生出来的。
使用layout的一个重要原因是PyQt自动布局小部件。
尽管在这个实例中没有widget的父级,但是当调用setLayout()时,
布局管理器将自己的小部件的所有权归属于表单,并拥有任何嵌套布局本身的所有权。
这意味着没有布局的小部件是一个顶级窗口。
当一个表单被删除时,它的所有子部件和布局也会以正确的顺序被删除。
对象从属关系:
所有PyQt类都是从包含所有小部件的QObject派生的。
因为QWidget是QObject的子类——它可以有一个“父”。
这种父子关系用于互补目的。
没有父窗口的小部件是顶级窗口。
具有父窗口小部件(通常是另一个窗口小部件)的窗口小部件通常包含(显示)在其父窗口小部件中。
这种关系定义为从属关系,父方有自己的子女。
PyQt使用父子所有权模型来确保这一点。
如果父窗口(顶层窗口)被删除,它的所有子窗口(窗口中包含的所有小部件)将被自动删除。
为了避免内存泄漏,请确保任何QObject(包括所有QWidget)都有一个父对象。
唯一的例外是顶层窗口。
PyQt QObject的大多数子类都有以父对象作为最后一个(可选)参数的构造函数。
但是因为小部件通常不会或者不需要传递这个参数。
这是因为对话框中使用的小部件是通过布局管理器布局的,
当这种情况发生时,它们会自动反映在它们所布局的小部件中,
所以他们终于找到了合适的父母,没有要求我们采取任何特殊行动。
但是,由于某些事件,必须显式传递父级,例如
当构造一个QObject子类对象时,该对象不是一个小部件,或者
是一个小部件,但没有布局(例如dock小部件)。
最后,有可能得到一个Python变量。
引用不再存在的基础PyQt对象。
Resize():给定小部件的绝对大小
SetFocus():设置焦点。
连接():
Move():给定小部件的绝对位置
导入#以获取sys.argv列表
从数学导入* #一些算术运算是必需的,包需要导入。
来自PyQt4。QtCore导入*
来自PyQt4。QtGui导入*
#创建一个继承QDialo的表单类
课堂形式(QDialog):
通过继承QDialog可以得到一个空白表单,
表单是一个灰色的矩形,一些方便的属性和方法。
例如,用户单击X按钮,对话框关闭。
一般来说,当一个小部件被关闭时,它将被完全隐藏。
def __init__(self,parent=None):
创建Form类的__init__()方法,设置参数parent,默认为None,
用super()方法初始化它。
没有父窗口的Widget成为顶层窗口,这是用户想要的形式。
您需要创建两个小部件并不断引用它们,以便以后可以在外部访问它们的__init __()。
因为小部件没有父窗口,所以这些小部件看起来像是顶级窗口。
这些小部件在初始化后获得它们父部件。
超级(形态,自我)。__init__(父级)
一旦应用程序运行并且大小被重置,页面中额外的垂直空间将被QTextBrowser占用,
该应用程序的小部件将水平增长。这是通过布局管理器自动处理的。
self.browser=QTextBrowser()
#给QLineEdit一些文本来初始化显示
self.lineedit=QLineEdit(键入表达式并按Enter )
#在QLineEdit中选择文本信息
#这是为了方便用户输入,这些文字信息可以很容易地重写
self.lineedit.selectAll()
#创建垂直布局框
layout=QVBoxLayout()
#将之前创建的两个空格添加到垂直布局框中
layout.addWidget(self.browser)
layout.addWidget(self.lineedit)
#将布局放入表单中
self.setLayout(布局)
#设置焦点
self.lineedit.setFocus()
self.connect(self.lineedit,SIGNAL(returnPressed()),self.updateUi)
self.setWindowTitle(Calculate )
def updateUi(自身):
尝试:
#代码转换为unicode代码
text=unicode(self . lineedit . text())
#向大量QTextBroswer添加文本信息
#通过使用eval(0,92,197);边距:0px填充:0px背景:none 0% 0%/auto repeat scroll padding-box border-box rgba(0,0,0,0);self . browser . append( % s=b % s/b %(text,eval(text)))
除了:
#向大量QTextBroswer添加文本信息
self.browser.append(
font color=red %s无效!/font % text)
app=QA application(sys . argv)
form=Form()
form.show()
app.exec_()的运行结果:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。