对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实现判断数组是否包含指定元素的方法
Jul 15 Python
python学习 流程控制语句详解
Jun 01 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Flask-WTF表单的使用方法
Jul 12 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
python 爬取疫情数据的源码
Feb 09 Python
Python如何向SQLServer存储二进制图片
Jun 08 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
Python 日期与时间转换的方法
Aug 01 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
Django实现聊天机器人
May 31 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
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
浅谈php命令行用法
2015/02/04 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
应届生人事助理求职信
2013/11/09 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
工会工作个人总结
2015/03/03 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书