用pyqt5设计一个简单的计算器,pyqt5实现计算器

  用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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: