对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登录pop3邮件服务器接收邮件的方法
Apr 30 Python
python批量提取word内信息
Aug 09 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
神经网络相关之基础概念的讲解
Dec 29 Python
Python调用服务接口的实例
Jan 03 Python
详解Python 切片语法
Jun 10 Python
教你一步步利用python实现贪吃蛇游戏
Jun 27 Python
Django自带日志 settings.py文件配置方法
Aug 30 Python
通过实例解析python描述符原理作用
Jan 22 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
selenium+超级鹰实现模拟登录12306
Jan 24 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/01/10 PHP
php二维数组排序详解
2013/11/06 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
asp.net+js实现金额格式化
2015/02/27 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
Python实现pdf文档转txt的方法示例
2018/01/19 Python
python实现求特征选择的信息增益
2018/12/18 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
中科方德软件测试面试题
2016/04/21 面试题
优秀毕业生求职信范文
2014/01/02 职场文书
我的求职计划书
2014/01/10 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
学生夜不归宿检讨书
2014/09/23 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
人事任命书范本
2015/09/21 职场文书
分家协议书范本
2016/03/22 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
python实现监听键盘
2021/04/26 Python
css弧边选项卡的项目实践
2023/05/07 HTML / CSS