QT学习之第一个程序
QT学习之第一个程序
目录
手动创建主窗口 居中显示 添加窗口图标 显示提示文本 Message Box的应用 手动连接信号与槽
手动创建主窗口
窗口类型
QMainWindow: 可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也是GUI程序的主窗口 QWidget: 如果是主窗口就使用,如果是对话框就使用,如果不确定,或者有可能作为顶层窗口,也有可能嵌入到其他窗口中,那么就使用 QWidget类 QDialog: 对话窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以使模态,也可以是非模态的。 QDialog窗口没有菜单栏、工具栏、状态栏等
QMainWindow
如果一个窗口包含一个或者多个窗口,那么这个窗口就是父窗口,被包含的窗口则是子窗口。 没有父窗口的窗口就是顶层窗口,QMainWindow就是顶层窗口,它可以包含很多界面元素,如果菜单栏、工具栏、状态栏、子窗口。
QMainWindow继承自QWidget类,拥有它的所有派生方法和属性 QMainWindow类中比较重要的方法: addToolBar():添加工具栏 centralWidget():返回窗口中心的一个控件,来设置返回Null setCentralWidget():设置窗口中心的控件 setStatusBar():设置状态栏 statusBar():获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout = 0)方法,显示状态栏信息,其中第一个参数是要显示的状态信息;第二个参数是信息停留的时间,单位是毫秒,默认是0,表示一直显示状态栏的信息 QMainWindow不能设置布局(使用setLayout方法),因为它有自己的布局
手动创建主窗口
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtGui import QIcon
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.resize(400,200)
self.setWindowTitle('MainWindow主窗口')
if __name__ == '__main__':
app=QApplication(sys.argv)
form=MainWindow()
form.show()
sys.exit(app.exec_())
程序示例
程序运行结果

代码解析
这里导入模块,widget组件位于PyQt5.QtWidget模块中
import sys from PyQt5.QtWidgets import QMainWindow,QApplication
自定义的窗口类MainWindow中,继承主窗口QMainWindow类所有的属性和方法
然后使用父类QMainWindow的构造函数super()初始化窗口
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
设置窗口大小
self.resize(400,200)
设置窗口标题
self.setWindowTitle('MainWindow主窗口')
所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。Python脚本可以在shell中运行。这是我们用来控制我们应用启动的一种方法。
app = QApplication(sys.argv)
实例化(初始化一个主窗口)
form=MainWindow()
show()方法在屏幕上显示出主窗口
form.show()
最后,应用进入主循环。在这个地方,事件处理开始执行。主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理。如果我们调用exit()方法或主widget组件被销毁,主循环将退出。sys.exit()方法确保一个不留垃圾的退出。系统环境将会被通知应用是怎样被结束的。
exec_()方法有一个下划线。因为exec是Python保留关键字。因此,用exec_()来代替。
sys.exit(app.exec_())
居中显示
程序示例
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.resize(400,200)
self.setWindowTitle('MainWindow主窗口')
self.center()
def center(self):
screen =QDesktopWidget().screenGeometry()
size=self.geometry()
self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)
if __name__ == '__main__':
app=QApplication(sys.argv)
form=MainWindow()
form.show()
sys.exit(app.exec_())
代码解析
QMainWindow利用QDeskWidget类来实现居中显示
from PyQt5.QtWidgets import QMainWindow,QApplication,QDesktopWidget
QDesktopWidget().screenGeometry()获得屏幕大小
self.geometry()获得QWidget窗口的大小
self.move():移动窗口位置
def center(self):
screen =QDesktopWidget().screenGeometry()
size=self.geometry()
self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)
添加窗口图标
程序示例
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtGui import QIcon
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.resize(400,200)
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon("t01ad133e672b2af23e.webp.jpg"))
if __name__ == '__main__':
app=QApplication(sys.argv)
form=MainWindow()
form.show()
sys.exit(app.exec_())
运行结果
代码解析
导入必要的模块
from PyQt5.QtGui import QIcon
setGeometry()做了两件事:将窗口在屏幕上显示,并设置了它的尺寸。setGeometry()方法的前两个参数定位了窗口的x轴和y轴位置。第三个参数是定义窗口的宽度,第四个参数是定义窗口的高度。事实上,这是将resize()和move()方法融合在一个方法内。为了做好这个例子,我们创建了一个QIcon对象。QIcon对象接收一个我们要显示的图片路径作为参数。
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon("t01ad133e672b2af23e.webp.jpg"))
显示提示文本
程序示例
import sys
from PyQt5.QtWidgets import (QMainWindow, QToolTip,QPushButton, QApplication)
from PyQt5.QtGui import QFont
class MainWindow(QMainWindow):
def __init__(self,parent=None):
super(MainWindow,self).__init__(parent)
self.initTip()
def initTip(self):
QToolTip.setFont(QFont('SansSerif', 10))
# self.setToolTip('This is a <b>QWidget</b> widget')
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
btn.resize(btn.sizeHint())
btn.move(50, 50)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Tooltips')
if __name__ == '__main__':
app = QApplication(sys.argv)
form= MainWindow()
form.show()
sys.exit(app.exec_())
运行结果

代码解析
从方法的名字看上去,这个函数设置了提示框的字体,我们使用了10px的SansSerif字体。
QToolTip.setFont(QFont('SansSerif', 10))
调用setTooltip()创建提示框可以使用富文本格式的内容。
self.setToolTip('This is a <b>QWidget</b> widget')
创建一个按钮,并添加一个提示框
btn = QPushButton('Button', self) btn.setToolTip('This is a <b>QPushButton</b> widget')
调整按钮大小,并让按钮在屏幕上显示出来,sizeHint()方法提供了一个默认的按钮大小。
btn.resize(btn.sizeHint()) btn.move(50, 50)
Message Box的应用
详细的内容:https://gaianote.github.io/2018/08/03/pyqt5%E5%AD%A6%E4%B9%A0%E6%89%8B%E5%86%8C/
手动连接信号与槽
手动连接信号与槽的方法

程序示例
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QHBoxLayout, QPushButton, QWidget
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle("MainWindow")
self.button1 = QPushButton('关闭窗口')
self.button1.clicked.connect(self.onButtonClick)
self.setGeometry(300, 300, 300, 300)
self.button1.setFixedSize(55,40)
layout = QHBoxLayout()
layout.addWidget(self.button1)
main_frame = QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
def onButtonClick(self):
sender = self.sender()
print(sender.text() + '被按下了')
qApp = QApplication.instance()
qApp.quit()
if __name__ == '__main__':
app = QApplication(sys.argv)
form = MainWindow()
form.show()
sys.exit(app.exec_())
运行结果
点击关闭按钮会关闭窗口,并会出现关闭窗口被按下

代码解析
创建一个按钮
self.button1 = QPushButton('关闭窗口')
将信号(按钮)与槽连接起来
self.button1.clicked.connect(self.onButtonClick)
设置按钮的固定大小
self.button1.setFixedSize(55,40)
构造一个水平布局管理器,必须将它添加到另一个布局管理器中
在这个水平的布局管理器中添加button
layout = QHBoxLayout() layout.addWidget(self.button1)
创建一个QWidget,用来添加水平布局管理器
main_frame = QWidget() main_frame.setLayout(layout)
如果继承的是QMainWindow,需要设置setCentralWidget()
self.setCentralWidget(main_frame)
QT学习之第一个程序的更多相关文章
- java学习 之 第一个程序及认识
以前也看过一系列的java方面的程序,但是还没有正式敲过,今天正式学习并且正式敲出代码.在这里记录下来今日所得 写作工具:Notepad++ 在写作工具方面好多人建议用 记事本,但是我还是认为用 No ...
- Nginx学习之一-第一个程序Hello World
本例子实现了一个简单的hello world程序.运行效果: 虚拟机Ubuntu中: win7中chrome浏览器: 一.config文件编写 Nginx提供了一种简单的方式将第三方的模块编译到Ngi ...
- Spark学习之第一个程序打包、提交任务到集群
1.免秘钥登录配置: ssh-keygen cd .ssh touch authorized_keys cat id_rsa.pub > authorized_keys chmod 600 au ...
- Spark学习之第一个程序 WordCount
WordCount程序 求下列文件中使用空格分割之后,单词出现的个数 input.txt java scala python hello world java pyfysf upuptop wintp ...
- libevent学习笔记 —— 第一个程序:计时器
用libevent写个定时器其实步骤不多: 1.初始化libevent 2.设置事件 3.添加事件 4.进入循环 由于定时事件触发之后,默认自动删除,所以如果要一直计时,则要在回调函数中重新添加定时事 ...
- C语言学习之第一个程序
#include<stdio.h> int main() { printf("This is my first program!\n"); ; } 基本格式大致如下: ...
- 从零开始学习PYTHON3讲义(三)写第一个程序
<从零开始PYTHON3>第三讲 本页面使用了公式插件,因博客主机过滤无法显示的表示抱歉,并建议至个人主页查看原文. 我见过很多初学者,提到编程都有一种恐惧感,起源是感觉编程太难了.其 ...
- windows下Qt Creator5.1.0编写程序以及调用OpenCV库
系统说明 最近使用opencv编写程序,程序编的差不多就学习使用QT加个界面,首先声明下本人的系统和使用的软件版本, 系统: windows xp QT IDE:QT Creator5.1.0 Ope ...
- 我的QT5学习之路(二)——第一个程序
一.前言 “工欲善其事,必先利其器”,上一节,我介绍了Qt的安装和配置方法,搭建了基本的开发平台.这一节,来通过一个简单的例子来了解Qt的编程样式和规范,开始喽~~~ 二.第一个程序——Hello W ...
随机推荐
- Android中的Service:Binder,Messenger,AIDL
http://blog.csdn.net/luoyanglizi/article/details/51594016 http://blog.csdn.net/luoyanglizi/article/d ...
- Docker安装Zookeeper
⒈下载 docker pull zookeeper ⒉运行 docker run --name zk -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart ...
- 【逆向工具】IDA使用1-VS2015版本debug查找Main函数,加载符号文件
IDA 常见操作 空格,切换反汇编视图 选择CALL或是跳转 进入函数内部或是跳转处 返回键 ESC daq.exe 分析32位程序 ,生成的IDA数据库文件是 .idb Idap64.exe 分析6 ...
- 【转】Python之函数与变量
[转]Python之函数与变量 本节内容 函数介绍及其作用 函数的定义与调用 函数的参数说明 变量与作用域 值传递和引用传递 一.函数的介绍及其作用 编程语言中的函数与数学中的函数是有区别的:数学中的 ...
- CONFIG_DEBUG_USER【转】
转自:https://blog.csdn.net/adaptiver/article/details/12778621 关于CONFIG_DEBUG_USER 把menuconfig中查到的 CONF ...
- 驱动开发--【字符设备、块设备简介】【sky原创】
驱动开发 字符设备,块设备,网络设备 字符设备 以字节流的方式访问, 不能随机访问 有例外,显卡.EEPROM可以随机访问 EEPROM可以擦写1亿次,是一种字符设备,可以随机访问 读写是 ...
- dubbo系列三、架构介绍及各模块关系
一.整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口. 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代 ...
- centos6中iptables单机网络防火墙的使用
概述: iptables:基于软件的形式实现的一种防火墙的软件程序 Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是 ...
- 测试开发之Django——No7.Django模板中的过滤器
1.add 将参数添加到值. 例如: {{ value|add:"2" }} 如果value是4,那么输出将是6. 此过滤器将首先尝试将两个值强制转换为整数.如果失败,它将尝试将值 ...
- npm install 报错(npm ERR! errno -4048,Error: EPERM: operation not permitted,)解决方法
npm ERR! path E:\SouthernPowerGridProject\web_project\AutoOPS\autoops\node_modules\fsevents\node_mod ...
