首页 > 编程语言 >PyQt5-如何设置主窗口居中?退出应用程序如何操作?

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

时间:2023-11-02 19:33:03浏览次数:50  
标签:__ 窗口 self 应用程序 如何 PyQt5 按钮 app

(15 如何设置主窗口居中?退出应用程序如何操作?)

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
点击按钮 应用程序已经退出

标签:__,窗口,self,应用程序,如何,PyQt5,按钮,app
From: https://blog.51cto.com/NoamaNelson/8154101

相关文章

  • 如何理解过滤器链
    过滤器链是一种将多个过滤器按照一定的顺序组合在一起的设计模式,常见于Web开发中的请求处理流程中。通过过滤器链,可以对请求进行多个环节的处理和过滤,每个过滤器负责某个特定的功能或关注点。在一个典型的Web应用中,请求从客户端发起,经过服务器接收后,会经过一系列的过滤器......
  • vim 的nerdtree插件中如何显示当前打开的文件路径?
    树形目录nerdtree插件中如何显示当前打开的文件路径?类似这样:只需在.vimrc文件中加入下面3行就可以了"设置NerdTreemap<F3>:NERDTreeMirror<CR>map<F3>:NERDTreeToggle<CR>map<leader>r:NERDTreeFind<cr>......
  • 如何下载学习强国平台视频
    1在学习强国平台上找到自己喜欢的视频,点击右小角分享给微信好友“文件传输助手”(图1),随后打开分享的链接,复制视频网址(图2);图1图202将复制的网址到搜狗浏览器中打开,选择浏览器中的右上角“三”菜单,依次选择更多工具——开发者工具(F12)或者直接按键盘上的F12键;图303点击“Ne......
  • AI智能分析网关高空抛物算法如何实时检测高楼外立面剥落?
    高楼外立面剥落是一种十分危险的行为,会造成严重的人身伤害和财产损失。TSINGSEE青犀智能分析网关利用高楼外立面剥落的信息,结合高空抛物算法来进行处理就可很好解决此问题。1.数据收集首先,需要收集关于高楼外立面剥落的数据。这可以通过安装EasyCVR智能监控平台来实现,可以感......
  • 技术教程 —— 如何利用 SEI 实现音画同步?
     摘要:利用SEI解决数据流录制回放过程中的音画不同步问题。 文|即构Web SDK开发团队今年 6 月, ZEGO即构科技推出了行业内首套数据流录制PaaS 方案,打破传统录制服务传统,实现 100%录制还原效果(点击查看方案介绍文章)。在实现数据流录制回放的过程中,我们需要将音视频画面......
  • 通过tide库如何使用Rust语言采集汽车之家
    身边许多有车的朋友,在日常用车养车过程中,经常会碰到这样那样的问题,很多人都喜欢去汽车之家寻求帮助。那么今天,我将为大家带来的是使用tide库来编写的一个爬虫程序,并使用Rust语言来采集汽车之家的相关内容,不是特别难,有需要的朋友可以看看学习一下喔。```rustusetide::{Request,Re......
  • 如何通过HWebkit库配合Haskell语言采集链家图片
    链家是一个专业提供二手房源、楼盘等信息的网站,需要二手房的朋友,链家可是个首选的资源平台。今天我们将使用HWebkit库编写一个爬虫程序,然后使用Haskell语言来采集链家平台的相关图片,快来学习一下吧。```haskellimportNetwork.HTTP.Webkit--定义代理主机和端口proxyHost::Str......
  • 安防视频监控平台EasyCVR出现目录在线,通道离线的问题该如何解决?
    视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强......
  • 工业物联网如何推动企业数转智改?
    导读:物联网(IoT)技术在数字化转型中非常重要。伴随物联网不断在各行业的深度融合,中国制造2025、工业4.0等一系列国家战略提出和实施,工业技术+物联网技术的深度融合,由此,工业物联网(IIoT)应运而生。  工业物联网是什么?工业物联网作为更广泛物联网一个子集。工业物联网主要重点是工业......
  • 如何使用Haskell语言和tagsoup库相结合采集同花顺财经相关视频
    今天要给大家带来的是一个使用Haskell语言和tagsoup库相结合的爬虫程序,主要是用来采集同花顺财经上的相关视频。前段时间一个粉丝跟我要了好久,由于太忙了,一直拖到现在。正好给大家分享一下,一起学习交流。```haskellimportNetwork.HTTPimportText.HTML.TagSoup--定义一......