PyQt5基本窗口控件(一)QMainWindow
发布时间:2023-01-09 20:18:38 429
相关标签: # python# 信息# 工具
(PyQt5基本窗口控件(一)QMainWindow)
一、QMainWindow
你好,以下内容,出自王硕和孙洋洋两位的《PyQt5快速开发与实践》这本书,因为这段时间,在学习这一门语言,所以索性就在这里做个笔记。
1、窗口类型介绍
- QMainWindow、QWidget和QDialog三个类都是用来创建窗口的。
- 如果是主窗口,就使用QMainWindow类(包含标题栏、菜单栏、工具栏、状态栏等)
- 如果是对话框,就使用QWidget类
- 如果不确定,就使用QDialog类
2、创建主窗口
一下是QMainWindow在控件QWidget中,用setCentralWidget()方法设置的中心窗口。
QMainWindow类中的主要方法如下:
方法 | 描述 |
---|---|
addTooBar() | 添加工具栏 |
centralWidget() | 返回窗口中心的一个控件,未设置时返回 |
menuBar | 返回主窗口菜单 |
setCentralWidget() | 设置窗口中心的控件 |
setStatusBar() | 设置状态栏 |
statusBar | 获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout=0)方法,message是信息,参数是正整数的毫秒数 |
- 主窗口QMainWindow不能设置布局,它用自己的布局方法setLayout()
案例一 创建主窗口
# -*- coding:utf-8 -*-
# @Time:2022/12/7 0007 20:08
# @Author:晚秋拾叶
# @File:qt04_QMainWindow.py
# Python之PyCharm
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QIcon
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(400, 200)
self.status = self.statusBar()
self.status.showMessage("这是状态栏提示", 5000)
self.setWindowTitle("PyQt MainWindow例子")
if __name__ == "__main__":
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("./images/头像.ico"))
win = MainWindow()
win.show()
sys.exit(app.exec_())
- 代码分析:
- status.showMessage("这是状态栏提示", 5000) 就是刚才表格最后一项说明的,“这是状态栏提示”,显示5秒后消失。
- 自定义窗口MainWindow,继承了主窗口QMainWindow类的所有属性和方法,然后使用父类构造super初始化窗口,再设置窗口标题,最后通过消息循环显示窗口,状态栏可以直接有statusBar()产生,由showMessage()显示信息5秒
- 效果如下:
3、将主窗口放在屏幕中间
案例二、主窗口居中显示
# -*- coding:utf-8 -*-
# @Time:2022/12/7 0007 20:19
# @Author:晚秋拾叶
# @File:q04_center.py
# Python之PyCharm
from PyQt5.QtWidgets import QDesktopWidget, QApplication, QMainWindow
import sys
class WinForm(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("主窗口放在屏幕中间的例子")
self.resize(370, 250)
self.center()
def center(self):
screen = QDesktopWidget().screenGeometry()
size = self.geometry()
self.move(int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2))
if __name__ == '__main__':
app = QApplication(sys.argv)
win = WinForm()
win.show()
sys.exit(app.exec_())
- 代码分析:
- self.resize(370, 250) 该语句设置QWidget窗口大小,宽度是370像素,高度是250像素
- screen = QDesktopWidget().screenGeometry() 该行语句用来计算显示器屏幕的大小:screen.width()*screen.height(),其中QDesktopWidget()是描述显示屏幕的类(PyQt6已经去掉)
- size = self.geometry() # 直译是几何构造的函数 该行语句获取QWidget窗口的大小:size.width()*size.height()
- (int((screen.width() - size.width()) / 2), int((screen.height() - size.height()) / 2)) 这个语句将窗口移动到屏幕中间,这里与原文不一样,加了int,因为原文的环境已经改变,运行后报错,故改之。
- 效果如下:
4、关闭主窗口
案例三、关闭主窗口
# -*- coding:utf-8 -*-
# @Time:2022/12/7 0007 21:04
# @Author:晚秋拾叶
# @File:qt04_closeMainWin.py
# Python之PyCharm
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QPushButton, QApplication, QWidget
import sys
class WinForm(QMainWindow):
def __init__(self):
super().__init__()
# 定义主窗口Form的标题
self.setWindowTitle('关闭主窗口例子')
# 建立一个按钮button1
self.button1 = QPushButton('关闭主窗口')
self.button1.clicked.connect(self.onButtonClick)
# 把按钮放到一个垂直布局里面
layout = QHBoxLayout()
layout.addWidget(self.button1)
# 建立主框架,把上面布局放里面,然后居中
main_frame = QWidget()
main_frame.setLayout(layout)
self.setCentralWidget(main_frame)
# 定义按钮动作
def onButtonClick(self):
# sender是发送信号的对象
sender = self.sender()
print(sender.text() + '被按下了')
# 定义一个退出代码,点击quit()
qApp = QApplication.instance()
qApp.quit()
if __name__ == '__main__':
app = QApplication(sys.argv)
form = WinForm()
form.show()
sys.exit(app.exec_())
-
代码分析:
- 当单击“关闭主窗口” 后,将关闭显示的窗口。
- 通过以下代码将按钮的clicked()信号与onButtonClick槽函数关联起来,即发送信号给动作方法函数,执行之。
- onButtonClick槽函数随时等待信号,它里面有个退出函数quit(),同时通过按钮的text()函数把按钮按下去的信息,在后台打印显示。
-
效果如下:
-
文章来源: https://blog.51cto.com/u_15930659/5990454
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报