博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取其他应用窗体句柄_PyQt5学习笔记(一)窗体控制
阅读量:6657 次
发布时间:2019-06-25

本文共 5156 字,大约阅读时间需要 17 分钟。

非本人原创,仅为笔记,与诸君共勉(`・ω・´)
课程链接:
PyQt5教程,来自网易云课堂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
bd8c8f3e9bc392373d8cb6d2bad3b132.png
此处为23讲之后的笔记,之前为Qt Designer可视化开发的入门教学

主窗口类型

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

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

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

import sysfrom PyQt5.QtWidgets import QMainWindow, QApplicationfrom 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_())

运行结果如下:

81eeb58405c1788ae6ff1f0ae41a7c6a.png

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

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


窗口居中显示

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

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

import sysfrom PyQt5.QtWidgets import QDesktopWidget, QMainWindow, QApplicationfrom 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 sysfrom PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QPushButton, QWidget​class QuitApplication(QMainWindow):    def __init__(self):        super(QuitApplication, self).__init__()        self.resize(300, 120)        self.setWindowTitle("退出应用程序")​        # 添加Button        self.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_())

运行结果:

911e3da99e9f16f4bd887ec0b5ad5f90.png
点击便退出

设置窗口和应用程序图标

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_())

运行结果:

495e653e0d7a297737822387d8b4d386.png

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

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


显示控件的提示信息

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

import sysfrom PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QToolTip, QPushButton, QWidgetfrom 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("今天是星期五")​        # 设置窗口大小,四个参数代表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_())

运行结果

fb7a69db048e0069090b7055fd48b2fe.png

7af877ef6c0ca829315ee8d547f77c78.png

转载地址:http://hmvto.baihongyu.com/

你可能感兴趣的文章
python 爬虫之BeautifulSoup 库的基本使用
查看>>
Linux 文件查找命令详解
查看>>
MySQL中权限管理
查看>>
JavaEE 请求响应
查看>>
如何解决数据文件传输的风险?
查看>>
Hyper-v集群高可用性配置
查看>>
查看域名解析是否生效的方法
查看>>
javax.crypto.spec.SecretKeySpec
查看>>
ubuntu14.04搭建Nginx+php+mysql+phpmyadmin
查看>>
fatal error C1083: 无法打开预编译头文件:“Debug\a.pch”: No su
查看>>
Linux Crontab定时任务
查看>>
ubuntu安装谷歌浏览器
查看>>
崛起于Springboot2.X之mysql读写分离升级版(22)
查看>>
Weblogic数据池测试出错
查看>>
django 迁移数据 暂时禁用auto_now / auto_now_add
查看>>
多个线程之间的通信
查看>>
Tomcat中server.xml文件内各节点详解
查看>>
SSH远程访问及控制
查看>>
centos6 远程桌面链接
查看>>
jquery javascript iframe操作
查看>>