PyQt5学习笔记2-GUI编程基础-2

通过三个简单软件程序分析,找到PyQt GUI编程的感觉!

(源自《Rapid GUI Programming with Python and Qt》,本文将示例由Qt4改成Qt5版本)

软件2:计算器

 该示例是一个对话框应用程序,即没有菜单栏、工具条、状态栏。
 软件功能:
   1.用户输入数学表达式,按回车键后,表达式及结果就会显示出来。
   2.如果输入的表达式无效,软件会显示错误信息。

软件运行效果图

 1 ‘‘‘
 2 一个计算器
 3 该示例是一个对话框应用程序,即没有菜单栏、工具条、状态栏。
 4 软件功能:
 5 1.用户输入数学表达式,按回车键后,表达式及结果就会显示出来。
 6 2.如果输入的表达式无效,软件会显示错误信息。
 7 ‘‘‘
 8
 9 import sys
10 from math import *  # 输入的表达式可使用math模块中所有数学函数,如sin、cos
11 from PyQt5.QtWidgets import *   # 使用此模块中的QWidget,QTextBrowser、QLineEdit
12
13 # 通过QDialog子类化的方法创建一个顶级窗口
14 # PyQt中的所有控件都是继承自QWidget, 如:QDialog,QLineEdit
15 class Form(QDialog):
16
17     def __init__(self):
18         super().__init__()   # 初始化窗口
19
20         # 创建两个窗口控件
21         self.browser = QTextBrowser()
22         self.lineedit = QLineEdit("Type an expression and press Enter")
23         self.lineedit.selectAll()
24
25         # 创建一个垂直布局管理器QVBoxLayout
26         # PyQt提供了三种布局管理器:垂直布局/水平布局/网格布局,它们可以彼此嵌套。
27         # 使用了布局管理器后,各种控件会随着窗口的大小改变自动调整。
28         layout = QVBoxLayout()
29         layout.addWidget(self.browser)
30         layout.addWidget(self.lineedit)
31         self.setLayout(layout)
32
33         self.lineedit.setFocus()
34
35         # 信号(returnPressed)连接到槽(updateUi)
36         # 当用户在lineedit上按下回车键时,retrunPressed信号就会发射出来,
37         # 因有connect , 此时会调用updateUi().
38         self.lineedit.returnPressed.connect(self.updateUi)
39
40         self.setWindowTitle("Calculate")
41
42     def updateUi(self):
43         try:
44             text = self.lineedit.text()
45
46             # 使用eval函数计算表达式的值
47             self.browser.append("{} = <b>{}</b>".format(text,eval(text)))
48         except:
49             self.browser.append("<font color=red>{} is invalid!</font>".format(text))
50
51 app = QApplication(sys.argv)
52 form = Form()   # 创建Form实例
53 form.show()     # 调用了show()后,事件循环开始,显示出窗口
54 app.exec_()
时间: 2024-10-16 22:03:12

PyQt5学习笔记2-GUI编程基础-2的相关文章

Linux程序设计学习笔记----Socket网络编程基础之TCP/IP协议簇

转载请注明出处: ,谢谢! 内容提要 本节主要学习网络通信基础,主要涉及的内容是: TCP/IP协议簇基础:两个模型 IPv4协议基础:IP地址分类与表示,子网掩码等 IP地址转换:点分十进制\二进制 TCP/IP协议簇基础 OSI模型 我们知道计算机网络之中,有各种各样的设备,那么如何实现这些设备的通信呢? 显然是通过标准的通讯协议,但是,整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等,如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只

java学习笔记14--多线程编程基础1

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为一个进程,例如:用字处理软件编辑文稿时,同时打开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程 进程要占用相当一部分处理器时间和内存资源 进程具有独立的内存空间 通信很不方便,编程模型比较复杂 多线程 一个程序中多段代码同时并发执行,称为多线程,线程比进程开销小,协作和数据交换容易

Linux学习笔记之shell编程基础

编程语言: 机器语言.汇编语言 .高级语言 静态语言:编译性语言 ,特点: 强类型(变量在使用前,必须先声明,甚至还需要初始化):事先转换成可执行文件.包含语言如: C .C++.JAVA.C# 动态语言:解释性语言 ,特点: 弱类型(变量用时声明,甚至不区分类型):边解释边执行.包含语言如: ASP.ASP.NET .PHP .SHELL .Python .PERL 编程能力: 面向过程 :Shell.C 面向对象:Python .Perl .JAVA .C++ Bash :变量 类型 环境变

java学习笔记15--多线程编程基础2

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡的过程 一个线程在任何时刻都处于某种线程状态(thread state) 线程生命周期状态图 诞生状态 线程刚刚被创建 就绪状态 线程的 start 方法已被执行 线程已准备好运行 运行状态 处理机分配给了线程,线程正在运行 阻塞状态(Blocked) 在线程发出输入/输出请求且必须等待其返回 遇到

shell脚本编程学习笔记-shell脚本编程基础介绍

一. Shell脚本介绍及第一个规范shell脚本说明 1.1 shell脚本简介 1.1.1 shell是什么? shell是一个命令解释器它在操作系统的最外层负责直接与用户对话把用户的输入解释给操作系统并处理各种各样的操作系统的输入结果输出到屏幕返回给用户,这种对话可以是交互是的(从键盘输入命令可以立即得到shell的回应)或非交互(脚本的方式). 下图中×××的部分就是shell处于操作系统的位置. 1.1.2什么是shell脚本 当linux命令或语句不在命令行下执行(严格的说命令行执行

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对象进行的调用的虚行为. 1.比較两个Sales_item对象 在编写函数计算销售总数之前,须要定义比較Sales_item对象的方法.要用Sales_item作为关联容器的keyword,必须能够比較它们.关联容器默认使用keyword类型的小于操作符,可是假设给Sales_item定义小于操作符,

C++ Primer学习笔记32_面向对象编程(3)--继承(三):多重继承、虚继承与虚基类

C++ Primer学习笔记32_面向对象编程(3)--继承(三):多重继承.虚继承与虚基类 一.多重继承 在C++语言中,一个派生类可以从一个基类派生,称为单继承:也可以从多个基类派生,称为多继承. 多重继承--一个派生类可以有多个基类 class <派生类名> : <继承方式1> <基类名1>,<继承方式2> <基类名2>,... { <派生类新定义成员> }; 可见,多继承与单继承的区别从定义格式上看,主要是多继承的基类多于一个

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g

Hadoop学习笔记(7) ——高级编程

Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成<key, value>. 2.映射(map):根据输入的<key, value>进生处理, 3.合并(combiner):合并中间相两同的key值. 4.分区(Partition):将<key, value>分成N分,分别送到下一环节. 5.化简(Reduce):将中间结