对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 Deque 模块使用详解
Jul 04 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 Python
Python 批量下载阴阳师网站壁纸
May 19 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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程序的方法小结
2012/02/23 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
JS 面向对象的5钟写法
2009/07/31 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
python实现给数组按片赋值的方法
2015/07/28 Python
python模拟事件触发机制详解
2018/01/19 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
自学python的建议和周期预算
2019/01/30 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
python求前n个阶乘的和实例
2020/04/02 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
如何实现一个自定义类的序列化
2012/05/22 面试题
某同学的自我鉴定范文
2013/12/26 职场文书
校园活动宣传方案
2014/03/28 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
环境保护建议书
2014/08/26 职场文书
校外活动方案
2014/08/28 职场文书
python中print格式化输出的问题
2021/04/16 Python
go语言中http超时引发的事故解决
2021/06/02 Golang
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
win7配置本地ftp服务器的图文教程
2022/08/05 Servers