PyQt5-如何设置主窗口居中?退出应用程序如何操作?

简介: PyQt5-如何设置主窗口居中?退出应用程序如何操作?

1 如何实现主窗口居中显示?

  • 让主窗口居中,其实就是让窗口的左右边缘到左右屏幕距离相等,让窗口的上下边缘到上下屏幕的距离相等;
  • 主要是需要进行计算和移动工作;
  • 可以使用 QDesktopWidget 类来获取屏幕的大小和位置信息,然后根据这些信息计算出窗口的位置和大小;
  • QDesktopWidget().screenGeometry()可以获取到屏幕坐标:
    def screenGeometry(self, *__args): # real signature unknown; restored from __doc__ with multiple overloads
        """
        screenGeometry(self, screen: int = -1) -> QRect
        screenGeometry(self, QWidget) -> QRect
        screenGeometry(self, QPoint) -> QRect
        """
        pass
  • 具体步骤如下:

1.1 获取屏幕坐标

  • 首先获取到屏幕坐标系:
screen = QDesktopWidget().screenGeometry()

1.2 获取窗口坐标

  • 使用geometry()方法获取到当前窗口的坐标:
size = self.geometry()

1.3 居中计算

  • 然后进行计算,屏幕坐标减窗口坐标对应计算:
l = (screen.width() - size.width()) / 2
t = (screen.height() - size.height()) / 2

1.4 移动位置

  • 最后就是移动窗口到计算好的位置即可:
self.move(l, t)

1.5 完整代码

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/2 
# 文件名称:test021_CenterForm.py
# 作用:窗口居中
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QDesktopWidget


class CenterForm(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("标准窗口")
        self.resize(500, 400)

    def center(self):
        # 获得屏幕坐标
        screen = QDesktopWidget().screenGeometry()
        # 获取窗口坐标系
        size = self.geometry()
        l = (screen.width() - size.width()) / 2
        t = (screen.height() - size.height()) / 2
        self.move(l, t)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = CenterForm()
    win.show()
    sys.exit(app.exec_())

1.6 效果演示

在这里插入图片描述

2 如何退出应用程序?

2.1 使用按钮退出

  • 我们预期是使用一个按钮来点击后退出应用程序;
  • 之前我们使用的Qt Designer来实现的,主要是可视化操作;
  • 现在我们使用代码来实现看看效果;
  • 先添加一个按钮:
self.button = QPushButton("点击按钮")

2.2 信号与槽绑定

  • 把按钮的点击操作和槽进行绑定;
  • 后边会定义一个按钮点击事件;
self.button.clicked.connect(self.on_click)

2.3 布局和增加按钮

  • 把设置的按钮添加到窗口中,并设置布局等操作;
lay = QHBoxLayout()
lay.addWidget(self.button)

mframe = QWidget()
mframe.setLayout(lay)

self.setCentralWidget(mframe)

2.4 定义一个按钮事件

  • 定义一个按钮事件,即退出事件;
    def on_click(self):
        # 获取对象信号
        s = self.sender()
        print(s.text() + " 应用程序已经退出")
        app = QApplication.instance()
        app.quit()

2.5 完整代码

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/11/2 
# 文件名称:test022_QuitAPP.py
# 作用:退出应用程序
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QWidget, QPushButton

class QuitAPP(QMainWindow):
    def __init__(self):
        super(QuitAPP, self).__init__()
        # 窗口尺寸
        self.resize(500, 400)
        # 窗口标题
        self.setWindowTitle("验证应用程序的退出")

        # 设置一个按钮
        self.button = QPushButton("点击按钮")

        # 信号与槽关联
        self.button.clicked.connect(self.on_click)

        # 水平布局
        lay = QHBoxLayout()
        lay.addWidget(self.button)

        # 增加按钮
        mframe = QWidget()
        mframe.setLayout(lay)

        self.setCentralWidget(mframe)

    # 按钮事件
    def on_click(self):
        # 获取对象信号
        s = self.sender()
        print(s.text() + " 应用程序已经退出")
        app = QApplication.instance()
        app.quit()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = QuitAPP()
    win.show()
    sys.exit(app.exec_())

2.6 效果演示

在这里插入图片描述

  • 点击按钮后输入以下信息:
D:\Python37\python.exe F:/pyqt_study/test_case/test022_QuitAPP.py
点击按钮 应用程序已经退出
目录
相关文章
|
数据采集 监控 供应链
ERP系统在大型企业中的实施案例研究
ERP系统在大型企业中的实施案例研究
954 0
|
3月前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 macOS Unlocker & OEM BIOS 2.7 for Linux
VMware Workstation Pro 25H2 macOS Unlocker & OEM BIOS 2.7 for Linux
547 3
VMware Workstation Pro 25H2 macOS Unlocker & OEM BIOS 2.7 for Linux
|
6月前
|
传感器 机器学习/深度学习 分布式计算
卡尔曼滤波的多传感器数据融合算法
卡尔曼滤波的多传感器数据融合算法
1081 0
|
传感器 物联网 数据安全/隐私保护
低功耗蓝牙和 Wi-Fi 相比有什么优缺点
低功耗蓝牙(BLE)与Wi-Fi相比,功耗更低、成本更少,适用于短距离、小数据量传输,如智能手环等;但传输速度和距离不如Wi-Fi,适合对实时性和带宽要求不高的场景。
1394 4
|
机器学习/深度学习 自然语言处理 语音技术
PyQt5-Qt Designer中控件的尺寸相关设置(sizePolicy策略)
PyQt5-Qt Designer中控件的尺寸相关设置(sizePolicy策略)
894 1
|
存储 Linux C++
|
C++
Qt图片定时滚动播放器+透明过渡动画
解决:[QWidget::paintEngine: Should no longer be called QPainter::begin: Paint device returned engine == 0, type: 1] 需要在哪个控件上绘制,就要在哪个控件类中重写 paintEvent() ,所以本项目 需要使用自定义的MyQLabel继承QLabel
321 0
|
计算机视觉 Python
OpenCV中图像的平移、旋转、倾斜、透视的讲解与实战(附Python源码)
OpenCV中图像的平移、旋转、倾斜、透视的讲解与实战(附Python源码)
1370 0
|
SQL JavaScript 前端开发
GitHub标星11.9k兼职项目!基于SpringBoot + VUE电商-分销商城系统
商城介绍 商城系统支持商家入驻,后端基于SpringBoot 研发,前端使用 Vue、uniapp开发, 系统全端全部代码开源 前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者。

热门文章

最新文章