QMainWindow和QWidget

2023-11-10

 

 一、QMainWindow

  QmainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件。在主窗口中可以添加控件,比如将工具栏、菜单栏、状态栏等添加到布局管理器中。

  窗口类型介绍:QMainWindow、QWidget、QDialog三个类都可以用来创建窗口,可以直接使用,也可以继承后使用。

  QMainWindow窗口包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,也可以说是GUI程序的主窗口。

  QDialog是对话框窗口的基类。对话框主要用来执行短期任务,或者与用户进行互动,它可以是模态的,也可以是非模态的。他没有菜单栏、工具栏、状态栏等。

  如果是主窗口,就使用QMainWindow类;

  如果是对话框,就使用QDialog类;

  如果不确定,有可能作为顶层窗口,也有可能嵌入到其他窗口,就使用QWidget类。

  QMainWindow类中比较重要的方法:

  

方法                                                            描述                                                         
addToolBar()

添加工具栏

centralWidget() 返回窗口中心的一个控件,未设置时返回None
menuBar() 返回主窗口的菜单栏
setCentralWidget() 设置窗口中心的控件
setstatusBar() 设置状态栏
statusBar() 获得状态栏对象后,调用状态栏对象的showMessage(message,int timeout = 0)方法,显示状态栏信息。第一个参数是要显示的信息,第二个参数是信息停留的时间,单位是ms,默认值为0,表示一直显示状态栏信息。

QmainWindow有自己的布局,它不能再设置布局了

1、创建主窗口

 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow, QApplication
 3 from PyQt5.QtGui import QIcon
 4 
 5 class MainWindow(QMainWindow):
 6     def __init__(self, parent = None):
 7         super(MainWindow, self).__init__(parent)
 8         self.resize(400, 200)
 9         self.status = self.statusBar()
10         self.status.showMessage('这是状态栏显示', 5000)
11         self.setWindowTitle('PyQt MainWindow例子')
12 
13 
14 if __name__ == '__main__':
15     app = QApplication(sys.argv)
16     app.setWindowIcon(QIcon(r'F:\火狐浏览器下载的文件\test.jpg'))
17     form = MainWindow()
18     form.show()
19     sys.exit(app.exec_())

 

结果:

注意这里状态栏信息会显示5秒(代码里面设置了5秒)

2、主窗口居中显示

 1 from PyQt5.QtWidgets import QDesktopWidget, QApplication, QMainWindow
 2 import sys
 3 
 4 class winform(QMainWindow):
 5     def __init__(self, parent = None):
 6         super(winform, self).__init__(parent)
 7         self.setWindowTitle('主窗口放在屏幕中间的例子')
 8         self.resize(400, 200)
 9         self.center()
10 
11     def center(self):
12         screen = QDesktopWidget().screenGeometry() #计算显示屏的尺寸
13         size = self.geometry()          #计算qwidget的窗口大小
14         self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)  #把窗口移动到屏幕正中央
15 
16 if __name__ == '__main__':
17     app = QApplication(sys.argv)
18     win = winform()
19     win.show()
20     sys.exit(app.exit(app.exec_()))

 

结果:

在这里使用了QDeskWidget类用来显示计算机显示屏的一些参数信息。然后调用move函数将窗体移动到屏幕正中央。

3、关闭主窗口

 1 from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QHBoxLayout
 2 import sys
 3 
 4 class winform(QMainWindow):
 5     def __init__(self, parent = None):
 6         super(winform, self).__init__(parent)
 7         self.setWindowTitle('关闭主窗口例子')
 8         self.button1 = QPushButton('关闭主窗口1')
 9         # self.button2 = QPushButton('关闭主窗口2')
10         self.button1.clicked.connect(self.onButtonClick)  #绑定动作函数
11         # self.button2.clicked.connect(self.onButtonClick)  #绑定动作函数
12 
13         layout = QHBoxLayout()
14         layout.addWidget(self.button1)
15         # layout.addWidget(self.button2)
16 
17         main_frame = QWidget()
18         main_frame.setLayout(layout)
19         self.setCentralWidget(main_frame)
20 
21     def onButtonClick(self):
22         #sender是发送信号的对象,此处发送信号的对象是button1按钮
23         sender = self.sender()
24         print(sender.text() + '被按下了')
25         qApp = QApplication.instance()
26         qApp.quit()
27 
28 if __name__ == '__main__':
29     app = QApplication(sys.argv)
30     form = winform()
31     form.show()
32     sys.exit(app.exec_())

 

 结果:

这里在主窗口上面添加了一个Button按钮控件,并将其绑定到onButtonClick函数上面。当按下按钮的时候,会调用onButtonClick函数,该函数里面又调用了quit函数。主窗口退出。

二、QWidget

  基础窗口控件QWidget类是所有用户界面对象的基类,所有窗口或者控件都直接或间接继承自QWidget类。

1、QWidget不包含边框的常用函数

  • 改变用户区的面积:
    QWidget.resize(width, height)
    QWidget.resize(Qsize)
  • 获得用户区的大小:
    QWidget.size()

     

  • 获得用户区的宽度和高度:
    QWidget.width()
    QWidget.height()

     

 

  • 设置客户区的高度、宽度、和面积(形成的窗体不可以使用鼠标来改变大小)
    QWidget.setFixedHeight()
    QWidget.setFixedWidth()
    QWidget.setFixedSize()

     

  • 设置客户区的大小和位置:

    Qwidget.setGeometry(int x, int y, int width, int height)#位置和大小

 2、QWidget包含边框的常用函数

  • 获得窗体的大小和位置
    QWidget.frameGeometry()
  • 设置窗口的位置
    QWiget.move(int x, int y)

     

  • 获得窗口左上角的的坐标
    QWidget.pos()

3、屏幕坐标系统显示

 1 from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
 2 import sys
 3 
 4 app = QApplication(sys.argv)
 5 widget = QWidget()
 6 btn = QPushButton(widget)
 7 btn.setText("Button")
 8 
 9 #以QWidget左上角为(0, 0)点
10 btn.move(20, 20)
11 
12 widget.resize(300, 200)     #设置窗口的大小
13 widget.move(250, 200)       #设置窗口的位置   以显示屏作为标准
14 
15 widget.setWindowTitle('PyQt坐标系统例子')
16 widget.show()
17 print('QWidget:')
18 print('w.x() = %d'%widget.x())      #窗体的位置
19 print('w.y() = %d'%widget.y())
20 print('w.width() = %d'%widget.width())      #窗体的尺寸
21 print('w.height() = %d'%widget.height())
22 print('QWidget.geometry')
23 print('widget.geometry().x() = %d'%widget.geometry().x())       #窗体用户区(即不包含边框)的位置
24 print('widget.geometry().y() = %d'%widget.geometry().y())
25 print('widget.geometry().width() = %d'%widget.geometry().width())       #窗体用户区(即不包含边框)的位置
26 print('widget.geometry().height() = %d'%widget.geometry().height())
27 
28 sys.exit(app.exec_())

 

结果:

4、建立一个主窗口

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

window = QWidget()
window.resize(300, 200)
window.move(250, 150)
window.setWindowTitle('hello PyQT5')
window.show()

sys.exit(app.exec_())

 

 结果:

 

 5、设置程序图标

 

 1 import sys
 2 from PyQt5.QtWidgets import QApplication, QWidget
 3 from PyQt5.QtGui import QIcon
 4 
 5 class Icon(QWidget):
 6     def __init__(self, parent = None):
 7         super(Icon, self).__init__(parent)
 8         self.initUI()
 9 
10     def initUI(self):
11         self.setGeometry(300, 300, 1250, 150)
12         self.setWindowTitle('程序图标')
13         self.setWindowIcon(QIcon(r'F:\火狐浏览器下载的文件\test.jpg'))
14 
15 if __name__ == '__main__':
16     app = QApplication(sys.argv)
17     icon = Icon()
18     icon.show()
19     sys.exit(app.exec_())

 结果:

6、显示气泡提示信息

 1 import sys
 2 from PyQt5.QtWidgets import QApplication, QWidget, QToolTip
 3 from PyQt5.QtGui import QFont
 4 
 5 class winform(QWidget):
 6     def __init__(self):
 7         super().__init__()
 8         self.initUI()
 9 
10     def initUI(self):
11         QToolTip.setFont(QFont('SansSerif', 10))
12         self.setToolTip('这是一个<b>气泡提示</b>')
13         self.setGeometry(200, 300, 400, 400)
14         self.setWindowTitle('气泡提示demo')
15 
16 if __name__ == '__main__':
17     app = QApplication(sys.argv)
18     win = winform()
19     win.show()
20     sys.exit(app.exec_())

 

 结果:

当鼠标放置在窗体上时候,会出现该气泡提示。

 

转载于:https://www.cnblogs.com/hexiaoqi/p/10160925.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QMainWindow和QWidget 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 矩阵的转置怎么编程用C语言,将一个3x3的矩阵转置,怎样用c语言写?

    include
  • 学建模时常遇到的问题(看专业解答)

    常做到一半就卡住 那是不是操作时有问题 没有处理好 选择面数选不中 选择线选不中 还只能用最初始的命令 这些有一种可能就是你操作模型时 按到了空格键 然后界面就会锁死 按空格键就阔以取消啦 还有一个情况就是 进入可编辑模式之后 对模型进行点
  • 权限提升-MYSQL数据库提权

    基础知识 1 需要了解掌握的权限 后台权限 网站权限 数据库权限 接口权限 系统权限 域控权限等 2 权限获取方法简要归类说明 后台权限 SQL注入 数据库备份泄露 默认或弱口令等获取帐号密码进入 网站权限 后台提升至网站权限 RCE或文件
  • zookeeper到nacos的迁移实践

    本文已收录 https github com lkxiaolou lkxiaolou 欢迎star 技术选型 公司的RPC框架是dubbo 配合使用的服务发现组件一直是zookeeper 长久以来也没什么大问题 至于为什么要考虑换掉zook
  • azkaban上传zip报错:Error Chunking during uploading files to db

    上传时页面报 Instalation Failed Error Chunking during uploading files to db 查看web server日志 2021 11 26 11 20 38 253 0800 INFO P
  • vue图片上传组件

    vue图片上传组件 最近在做项目的时候顺便补充了一下公司项目的公共组件库 刚刚手头事情告一段落 就来做个笔记 首先来看看最终效果 1 不允许删除 2 允许用户删除 显示删除按钮 实现的效果就是上图显示内容 接下来说说组件布局那部分直接上代码
  • 循环神经网络-LSTM

    参考 长期以来 隐变量模型存在着长期信息保存和短期输入缺失的问题 解决这一问题的最早方法之一是长短期存储器 long short term memory LSTM Hochreiter and Schmidhuber 1997 它有许多与门
  • 教你如何更改windows10系统默认字体

    以管理员身份运行命令提示符 打开注册表 定位到HKEY LOCAL MACHINE SOFTWARE Microsoft WindowsNT CurrentVersion Fonts 在右边找的Microsoft YaHei Microso
  • 常用继电器模块的PCB设计与实物分享

    今天分享一下自己做的一块继电器模块 因为之前有用到继电器模块的原理图 索性自己画了一下 原理图如图所示 一 原理图 继电器模块还是比较简单的 就是通过三极管的开关作用来使电路导通 从而来控制继电器的磁铁通电吸合内部的衔铁 其高低电平的触发其
  • Day6 - Python第三方模块xpinyin、faker、pymysql、Redis、rediscluster、xlrd、xlutils、openpyxl、request

    一 第三方模块 安装第三方模块 第一种方式 1 将pip命令加入到环境变量 且将python的安装目录下scripts目录加入到环境变量里面 2 pip install 数据库名称 pip install xpinyin python2 e
  • 用超级厉害的VS Code工具来嗨皮编程吧!

    用超级厉害的VS Code工具来嗨皮编程吧 目录 用超级厉害的VS Code工具来嗨皮编程吧 第一步 安装VS Code 第二步 插件宝藏等你来挖 1 装插件如虎添翼 3 快捷键 让编码更轻松 嗨皮 各位同行的学习小伙伴们 今天我来为你们介
  • 关于git cherry-pick

    项目开发过程中 经常遇到多分支的代码库管理 将提交的代码修改从一个分支转移到另一个分支是常见需求 这时分两种情况 一种情况 需要另一个分支的所有代码变动 那么就采用合并 git merge 另一种情况 只需要部分代码变动 某几个提交 这时可
  • Spring Cloud Alibaba,中国 Javaer 的福音,为微服务续上 18 年

    h2 Spring Cloud Alibaba 中国 Javaer 的福音 为微服务续上 18 年 nbsp h2 p 热 p p a href https my oschina net u 3820517 h4cd a nbsp 发布于
  • Vue指令 关于---v-html_指令 和 v-test_指令 详解

    要学会大大方方的表达爱意 爱不是冷冰冰 爱是炙热的 永远都是 笨蛋才会说反话 笨蛋才会把喜欢的人越推越远 一 在讲解 v test 指令 和v html 指令 前我么先回顾一些基本指令 v bind 单项绑定解析表达式 可简写为 xxx v
  • day6-列表的遍历,增删查改,比较运算,列表推导式,列表的相关函数

    列表基础学习 一 遍历列表 1 遍历列表 二 列表的增删查改操作 1 增 1 列表 append 元素 2 列表 insert 下标 元素 2 删 删除元素 1 del 列表 下标 2 列表 remove 元素 3 列表 pop 下标 列表
  • Win7、Win10系统封装后GHO文件太大?是因为虚拟内存没关、休眠文件没删!

    很多镜像文件封装好都是3 5g的 而最近我自己封装系统 封装完是8g 百度才知道是C盘有休眠文件大概5 4g 下图是我正在用的电脑删除休眠文件后的大小对比 删除休眠文件方法 1 在开始栏的 附件 里面找到 命令提示符 右击 以管理员身份运行
  • 文举论金:3.17黄金原油全面走势分析策略指导。

    市场没有绝对 涨跌没有定势 所以 对市场行情的涨跌平衡判断就是你的制胜法宝 欲望 有句意大利谚语 让金钱成为我们忠心耿耿的仆人 否则 它就会成为一个专横跋扈的主人 空头 多头都能赚钱 唯有贪心不能赚 是你掌控欲望还是欲望掌控你 古人云 不积
  • 使用eclipse创建一个图书管理系统(1)-----搭建架构

    目录 思维导图 图书管理系统的创建 第一步 搭建框架 使用者 第二步 搭建框架 被使用者 第三步 操作方法 第四步 main函数 思维导图 前言 昨天学了一下使用Java语言来写一个图书管理系统 于是今天写一篇博客作为一个小笔记巩固一下自己
  • git 打包两个版本差异

    git archive o update zip 当前版本号 git diff name only 上一版本号
  • QMainWindow和QWidget

    一 QMainWindow QmainWindow主窗口为用户提供一个应用程序框架 它有自己的布局 可以在布局中添加控件 在主窗口中可以添加控件 比如将工具栏 菜单栏 状态栏等添加到布局管理器中 窗口类型介绍 QMainWindow QWi