对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 时间处理datetime实例
Sep 06 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
python采集百度百科的方法
Jun 05 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
Django如何开发简单的查询接口详解
May 17 Python
Python 中Django安装和使用教程详解
Jul 03 Python
python3中关于excel追加写入格式被覆盖问题(实例代码)
Jan 10 Python
使用Python实现音频双通道分离
Dec 25 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
javascript中常用编程知识
2013/04/08 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
Django如何将URL映射到视图
2019/07/29 Python
在python中做正态性检验示例
2019/12/09 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
Linux文件系统类型
2012/09/16 面试题
毕业生的自我评价
2013/12/30 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
个人授权委托书范本
2014/09/14 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers