对PyQt5基本窗口控件 QMainWindow的使用详解


Posted in Python onJune 19, 2019

QMainWindow基本介绍

QMainWindow主窗口为用户提供了一个应用程序框架,它有自己的布局,可以在布局中添加控件。

窗口类型介绍

PyQt5中,主要使用以下三个类来创建窗口,可以直接使用,也可以继承后再使用

QMainWindow

QWidget

QDialog

QMainWindow

QMainWindow可以包含菜单栏,工具栏,状态栏,标题栏等,是GUI程序的主窗口。

如果我们需要创建主窗口程序,就使用该类。

QDialog

QDialog是对话框窗口的基类,对话框一般用来执行短期任务,或者与用户进行互动,它可以是模态的也可以是非模态的。QDialog没有菜单栏,工具栏,状态栏等。

如果我们需要的是对话框,就选择该类。

QWidget

该类作为QMainWindow和QWidget的父类,并未细化到主窗口或者对话框,作为通用窗口类,如果不确定具体使用哪种窗口类,就可以使用该类。

创建主窗口

QMainWindow官方文档

如果一个窗口包含一个或者多个窗口,这个窗口就是父窗口,被包含的窗口就是子窗口。没有父窗口的窗口就是顶层窗口,QMainWindow就是顶层窗口,它可以包含很多界面元素。

在OyQt中,在主窗口中会有一个控件(Widget)占位符来占着中心窗口,可以使用setCentralWidget()来设置中心窗口。

对PyQt5基本窗口控件 QMainWindow的使用详解

重要方法

方法 描述
addToolBar() 添加工具栏
centralWidget() 返回窗口中心的控件,未设置返回NULL
menuBar() 返回主窗口的菜单栏
setCentralWidget() 设置窗口中心的控件
setStatusBar() 设置状态栏
statusBar() 获取状态栏对象

Note: Creating a main window without a central widget is not supported. You must have a central widget even if it is just a placeholder.

QMainWindow不能设置布局,因为它有自己的布局,不过中心窗口是可以使用布局的。

创建一个主窗口

# _*_ coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton)
from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):
 def __init__(self, parent=None):
  super(MainWindow, self).__init__(parent)
  self.init_ui()

 def init_ui(self):
  #设置窗口属性
  self.setGeometry(200, 200, 400, 200)
  self.setWindowTitle('创建主窗口')
  self.setWindowIcon(QIcon(r"E:\\1.jpg"))
  #设置状态栏
  self.status = self.statusBar()
  self.status.showMessage('我是状态栏', 5000)


if __name__ == "__main__":
 app = QApplication(sys.argv[1:])

 window = MainWindow()
 window.show()

 sys.exit(app.exec_())

对PyQt5基本窗口控件 QMainWindow的使用详解

主窗口居中显示

# _*_ coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QDesktopWidget)
from PyQt5.QtGui import QIcon

class MainWindow(QMainWindow):
 def __init__(self, parent=None):
  super(MainWindow, self).__init__(parent)
  self.init_ui()

 def init_ui(self):
  #设置窗口属性
  self.resize(400, 200)
  self.setWindowTitle('主窗口居中显示')
  self.setWindowIcon(QIcon(r"E:\\1.jpg"))
  #设置状态栏
  self.status = self.statusBar()
  self.status.showMessage('我是状态栏', 5000)
  #居中显示处理
  self.move_center()

 def move_center(self):
  screen = QDesktopWidget().screenGeometry()
  form = self.geometry()
  x_move_step = (screen.width() - form.width()) / 2
  y_move_step = (screen.height() - form.height()) / 2
  self.move(x_move_step, y_move_step)

if __name__ == "__main__":
 app = QApplication(sys.argv[1:])

 window = MainWindow()
 window.show()

 sys.exit(app.exec_())

对PyQt5基本窗口控件 QMainWindow的使用详解

screen = QDesktopWidget().screenGeometry()

获取当前屏幕的大小

self.geometry()

获取窗口大小

关闭主窗口

# _*_ coding:utf-8 _*_
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout,
        QPushButton, QMainWindow)

class MainWindow(QMainWindow):
 def __init__(self):
  super(MainWindow, self).__init__()
  self.init_ui()

 def init_ui(self):
  self.setWindowTitle('关闭主窗口')

  layout = QVBoxLayout()
  self.close_btn = QPushButton('关闭', self)
  layout.addWidget(self.close_btn)

  main_frame = QWidget()
  self.setCentralWidget(main_frame)
  main_frame.setLayout(layout)

  self.close_btn.clicked.connect(self.on_button_click)

 def on_button_click(self):
  #将信息显示在状态栏中
  sender = self.sender()
  msg = sender.text() + " 被按下了"
  status = self.statusBar()
  status.showMessage(msg, 5000)
  #程序退出
  app = QApplication.instance()
  app.quit()

if __name__ == "__main__":
 app = QApplication(sys.argv[1:])

 window = MainWindow()
 window.show()

 sys.exit(app.exec_())

对PyQt5基本窗口控件 QMainWindow的使用详解

self.close_btn.clicked.connect(self.on_button_click)

PyQt中控件之间通信使用信号(Signal)和槽(slot)机制。

定义的方式为 控件.消息.connect(槽)

上例中,就是将button的clicked信号跟槽on_button_click进行了绑定。

以上这篇对PyQt5基本窗口控件 QMainWindow的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现简单状态框架的方法
Mar 19 Python
python基于multiprocessing的多进程创建方法
Jun 04 Python
Python写的一个简单监控系统
Jun 19 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
详解Python字符串切片
May 20 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
python中time库的实例使用方法
Oct 31 Python
python实现智能语音天气预报
Dec 02 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
Python如何将将模块分割成多个文件
Aug 04 Python
Python使用openpyxl模块处理Excel文件
Jun 05 Python
PyQt5 多窗口连接实例
Jun 19 #Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 #Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 #Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 #Python
python 读写excel文件操作示例【附源码下载】
Jun 19 #Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 #Python
网易有道2017内推编程题 洗牌(python)
Jun 19 #Python
You might like
单位速度在实战中的运用
2020/03/04 星际争霸
php stripslashes和addslashes的区别
2014/02/03 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
python时间日期操作方法实例小结
2020/02/06 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
项目投资意向书
2014/04/01 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
科级干部培训心得体会
2016/01/06 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
Python 图片添加美颜效果
2022/04/28 Python