非本人原创,仅为笔记,与诸君共勉(`・ω・´)
课程链接:

PyQt5教程,来自网易云课堂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

此处为23讲之后的笔记,之前为Qt Designer可视化开发的入门教学

主窗口类型

  • QMainWindow:可以包含菜单栏、工具栏、状态栏和标题栏,是最常见的窗口形式。
  • QDialog:是对话窗口的基类。没有菜单栏、工具栏、状态栏。
  • QWidget:不确定窗口的用途,就使用QWidget。

推荐使用面向对象的方式创建

下面尝试用代码来创建一个QMainWOndow类型的主窗口。

开始一般必须导入的第三方库:

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtGui import QIcon

然后定义代表窗口的类,这个类继承自QMainWindow

class FirstMainWin(QMainWindow):def __init__(self):# 使用父类的构造函数,即初始化列表super(FirstMainWin, self).__init__()# 设置主窗口的标题self.setWindowTitle("第一个主窗口应用")# 设置窗口的尺寸self.resize(400, 300)# 获得并显示当前的状态栏self.status = self.statusBar()# 在状态栏上增加一个只显示5000ms的消息self.status.showMessage("只存在5秒的消息", 5000)
​
if __name__ == '__main__':# 获取系统参数列表app = QApplication(sys.argv)# 设置窗口图标app.setWindowIcon(QIcon('./image/pic.ico'))# 创建实体对象main = FirstMainWin()# 显示窗体main.show()# 进入主循环,安全退出程序sys.exit(app.exec_())

运行结果如下:

其中__name__ == '__main__'这个判断是代表当前打开的窗体是否为这个程序的窗体。也就是说只有在当前窗口启动运行该程序,才会判对;如果使用import等手段在其他的程序或者窗口调用运行这个程序,则会判错,后续的主函数不会被执行。其中__name__代表系统当前运行的窗口名称,'__main__'代表这个程序的文件的窗口名称。

进入主函数后,app = QApplication(sys.argv)sys.exit(app.exec_())这两句话是必写的,具体意思可以在后面慢慢体会。


窗口居中显示

PyQt5本身没有让窗体居中的函数,我们需要自己写,不过也很简单。让窗口显示只需要获取系统屏幕大小的参数和我们的窗口的大小的参数,计算出窗口左上角的位置。再通过move方法移动至那个位置即可。

主体代码和上面那个一样(毕竟上面那个基本就是一个裸的框架)。不过我们需要多import一个子类QDesktopWidget

import sys
from PyQt5.QtWidgets import QDesktopWidget, QMainWindow, QApplication
from PyQt5.QtGui import QIcon
​
class CenterForm(QMainWindow):def __init__(self):# 使用父类的构造函数,即初始化列表super(CenterForm, self).__init__()
​# 设置主窗口的标题self.setWindowTitle("窗口居中")
​# 设置窗口的尺寸self.resize(400, 300)
​# 调用center方法self.center()
​def center(self):# 得到屏幕的尺寸screen = QDesktopWidget().screenGeometry()
​# 获取窗口尺寸size = self.geometry()
​# 计算居中窗口的左上角到屏幕左侧坐标的距离newLeft = (screen.width() - size.width()) / 2
​# 计算居中窗口的左上角到屏幕上边坐标的距离newTop = (screen.height() - size.height()) / 2
​# 移动窗口, 因为move方法只接受整数,所以我们类型转换一下self.move(int(newLeft), int(newTop))
​
​
if __name__ == '__main__':# 获取系统参数列表app = QApplication(sys.argv)
​# 创建实体对象main = CenterForm()
​# 显示窗体main.show()
​# 进入主循环,安全退出程序sys.exit(app.exec_())

此处用到了move()方法,这个方法对坐标系的建立和turtle库很像,它移动的对象是窗口的左上角。第一个参数代表移动后的窗口,左上角离屏幕左侧的距离;第二个参数代表移动后的窗口左上角离屏幕上方的距离。

其实windows系统下,我们的窗口默认是居中的


退出应用程序

之前可以在Qt Designer中通过将button的click()信号和close()槽函数关联来达到,只要点击button就可以直接退出程序。此处我们换一种思路,尝试通过Python代码来实现,退出应用程序。

import sys
from PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QPushButton, QWidget
​
class QuitApplication(QMainWindow):def __init__(self):super(QuitApplication, self).__init__()self.resize(300, 120)self.setWindowTitle("退出应用程序")
​# 添加Buttonself.button1 = QPushButton("退出应用程序")
​# 将信号与槽关联self.button1.clicked.connect(self.onClick_Button)
​# 创建水平布局layout = QHBoxLayout()layout.addWidget(self.button1)
​mainFrame = QWidget()mainFrame.setLayout(layout)
​self.setCentralWidget(mainFrame)
​# 按钮单机事件的方法(自定义的槽)def onClick_Button(self):print("按钮被按下")app = QApplication.instance()
​# 退出应用程序app.quit()
​
if __name__ == '__main__':app = QApplication(sys.argv)main = QuitApplication()main.show()sys.exit(app.exec_())

运行结果:

点击便退出


设置窗口和应用程序图标

import ...
​
class IconForm(QMainWindow):def __init__(self):super(IconForm, self).__init__()self.initUI()
​def initUI(self):self.setWindowTitle("设置窗口图标")self.resize(400, 300)
​# 设置窗口图标self.setWindowIcon(QIcon("./image/pic.ico"))
​
​
if __name__ == '__main__':app = QApplication(sys.argv)main = IconForm()main.show()sys.exit(app.exec_())

运行结果:

这个结果与操作系统有关,在windows环境下,结果如图所示,这个方法只能设置窗口图标;在Mac环境下,这个方法只显示了应用程序的图标(就是任务栏上的那个启动的程序的图标)。

所以这个方法只在windows中凑效。


显示控件的提示信息

什么叫控件的提示信息呢?每当我们将光标移动到一个按钮或者一个程序时,过一小会儿,光标会显示出一个小白框来显示这个按钮或者这个程序的名称或更多信息。

import sys
from PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QToolTip, QPushButton, QWidget
from PyQt5.QtGui import QFont
​
class ToolTipForm(QMainWindow):def __init__(self):super(ToolTipForm, self).__init__()self.initUI()
​def initUI(self):# 设置字体及其大小QToolTip.setFont(QFont("SanSerif", 12))
​# 设置当前对象即窗口的提示信息,给“星期五”加一个代表加粗的HTML标签self.setToolTip("今天是<b>星期五</b>")
​# 设置窗口大小,四个参数代表x,y,width,height,相当于move和resize两个函数的作用self.setGeometry(300, 300, 300, 300)self.setWindowTitle("设置控件提示信息")
​# 创建并设置按钮的提示信息self.button1 = QPushButton("我的按钮")self.button1.setToolTip("这是一个按钮")layout = QHBoxLayout()layout.addWidget(self.button1)
​mainFrame = QWidget()mainFrame.setLayout(layout)
​self.setCentralWidget(mainFrame)
​
​
if __name__ == '__main__':app = QApplication(sys.argv)main = ToolTipForm()main.show()sys.exit(app.exec_())

运行结果

c++ windows 点击按钮跳转另一个窗体_PyQt5学习笔记(一)窗体控制相关推荐

  1. CSS基础汇总——点击标题跳转详细博客【学习笔记】

    CSS 网页的美容师 理想中的结果: 结构(html)与样式(css)相分离 1.引入CSS样式表(书写位置) 行内式(内联样式) : <标签名 style="属性1:属性值1; 属性 ...

  2. 移动端 外部浏览器点击按钮跳转微信界面(唤醒微信)

    移动端点击按钮跳转微信界面(唤醒微信) <a href="weixin://">微信app</a> 或者 window.location.href = &q ...

  3. 微信小程序--实现按钮跳转另一个页面

    首先建立一个按钮 在 index.wxml页面中建立一个容器作为按钮 <view class='day-weather' bindtap='onTapDayWeather'> </v ...

  4. vue h5网页点击按钮 -- 跳到微信小程序 wx-open-launch-weapp;onMenuShareAppMessage 分享图片不显示,且方法已废弃

    h5网页点击按钮,唤醒微信小程序是否可以做? 可以!!,就是有点限制. 通过wx-open-launch-weapp就可以实现,但是限制 微信服务号才可以使用.也就是说必须是微信环境下. 文章最下边, ...

  5. Vue点击按钮跳转到新路由

    前言,点击 添加商品 按钮,跳转到新路由 1.第一步,绑定click事件 <el-button type="primary" @click="goAddPage&q ...

  6. html页面如何跳转到asp,asp点击按钮跳转页面 ASP中按钮的点击触发网页跳转

    ASP中按钮的点击触发网页跳转 asp中要实现点击一个按钮转到另一个网页有几种方法就是按下一个BUTTON,转到另一个网页,一共有哪些方式实现? 我只知道ona标签,背景图按钮,直接点击跳转链接hre ...

  7. activemenu怎么拼 vue_Vue-el-menu使用,点击按钮跳转指定页面

    话不多说,直接上代码,创建,声明,监听, class="dash-menu" unique-opened background-color="red" text ...

  8. jq 点击按钮跳转到微信_小程序 web-view组件跳转到小程序页面

    一.web-view组件 最近在做一个微信小程序项目, 需要在小程序中打开一个网页,然后点击返回按钮跳回小程序,步骤如下 添加微信官方 js 与 jq: 1.2. 然后绑定的按钮事件: 11.wx.n ...

  9. jq 点击按钮跳转到微信_实现点击复制微信号并自动打开微信加好友

    原地址:https://www.xuewangzhan.net/jquery/21100.html 复制按钮xyz2018 点击复制 clipboard.on('success', function( ...

最新文章

  1. linux 使用trick记录之20203010
  2. 记一次糟心的内网靶场实战
  3. JSBridge实战
  4. atexit()函数(进程退出函数,类似析构)
  5. easyx鼠标放置前按钮颜色_七种正确使用鼠标的好习惯,让你摆脱鼠标手的痛苦...
  6. 【华为云技术分享】网络场景AI模型训练效率实践
  7. 13款宝马x5质量到底怎么样_新款宝马X5和奔驰GLE450谁更强?
  8. angular表单验证
  9. en55032最新标准下载_欧盟新EMC标准EN55032将强制实施
  10. java 1.8 32位_JDK1.8 32位官方下载
  11. OpenCV车牌识别
  12. STM32F103ZET6---【硬件篇】定时器
  13. 搜索引擎技术 —— 网络爬虫
  14. 微信公众号CSS样式常见问题解析
  15. 遇上与你一样的她(他)| MixLab人工智能
  16. 滴滴2020校招算法笔试 2019.08.27
  17. 复合牛奶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 【java】【kotlin】判断当前日期是星期几、是否为月底;获取当前季度起始时间
  19. 为什么usb计算机连接无法识别,无法识别usb设备,教您电脑出现无法识别usb设备怎么办...
  20. Source Insight使用教程(一):导入工程

热门文章

  1. 腾讯技术直播间 | Apache IoTDB x Apache Pulsar Meetup
  2. Serverless:云函数 + 小马BI,将报表极速搬上云
  3. Instagram 在 PyCon 2017 的演讲摘要
  4. ARM Keil MDK开发STM32工程模板
  5. 大剑无锋之Zookeeper面试题
  6. mybatis实现多对多
  7. java小编程----最接近的三数之和
  8. leetcode 306. Additive Number | 306. 累加数(Java)
  9. 【Git】Git 修改刚提交的 commit message
  10. Leet Code OJ 202. Happy Number [Difficulty: Easy]