对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模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
Python列表删除的三种方法代码分享
Oct 31 Python
python flask中静态文件的管理方法
Mar 20 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
Django models filter筛选条件详解
Mar 16 Python
python中执行smtplib失败的处理方法
Jul 01 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
解决python3安装pandas出错的问题
May 20 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上传大文件失败的原因及应对策略
2015/10/20 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
酒店应聘自荐信
2013/11/09 职场文书
语文教育专业推荐信范文
2013/11/25 职场文书
学生请假条格式
2014/04/11 职场文书
幼儿发展评估方案
2014/06/11 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
四风对照检查材料范文
2014/09/27 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
先进个人总结范文
2015/02/15 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Go语言入门exec的基本使用
2022/05/20 Golang
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技