pyqt5全笔记

此pyqt5的笔记来自B站李宁老师的视频,感谢这位老师!(https://www.bilibili.com/video/BV154411n79k)

课时3:开发第一个基于pyqt5的桌面应用程序

开发必须使用的两个类:QApplication(代表整个应用程序)和QWidge(代表窗口),都在PyQt5.Widgets

1、创建一个初始界面

import sys

from PyQt5.QtWidgets import QApplication,QWidget

# 只有从当前应用程序直接运行part3.py,才会调用(才会为真)
if __name__ == '__main__':
    # 创建QApplication的实例,sys获得命令行参数
    app = QApplication(sys.argv)
    # 创建一个窗口
    w = QWidget()
    # 设置窗口尺寸
    w.resize(400,200)
    # 移动窗口
    w.move(300,300)

    # 设置窗口标题
    w.setWindowTitle('biaoti')
    # 显示窗口
    w.show()
    # 进入程序的主循环,并通过exit函数确保主循环安全结束
    sys.exit(app.exec_())

课时5、6:使用designer设计图形界面

C:\ProgramData\Anaconda3\Lib\site-packages\PySide2
名称designer.exe

Layouts:布局控件
    vertical layout:垂直布局
    horizontal layout:水平布局
    grid layout:栅格布局/网格布局
    form layout:表单布局
Spacers:控制控件在垂直和水平方向间隔
Buttons:所有按钮控件
    Push button:普通按钮
    Tool button:工具条按钮
    radio button:单选按钮
    check box:多选按钮
    command link button:连接命令按钮
    dialog button box:
item views:
    list view:列表
    tree view:树
    table view:表格
containers:容器控件
input widgets:采集用户输入的控件
display widgets:显示信息的控件
    horizontal line:水平分隔线
    vertical line:垂直分隔线

课时7:将.ui文件生成.py文件

方法一:通过命令行

python -m PyQt5.uic.pyuic demo.ui -o demo.py

方法二:

pyuic5 demo.ui -o demo.py

课时8、9、10:在QTdesigner中使用水平、垂直布局,同时使用两者

方法一:先放button,再选中所有的button,右键-布局-水平布局
方法二:先拖过来一个水平布局控件,再往里面放button等控件,注意,放的时候要放到控件的旁边(有蓝色的线出来的地方)

得到的ui,转为py文件
demo.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'demo.ui'
#
# Created by: PyQt5 UI code generator 5.12
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(190, 280, 351, 80))
        
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.toolButton.setText(_translate("MainWindow", "..."))
        ### 删去了一部分

使用demo.py文件 runDemo.py

import sys
# 引入demo.py文件
import demo

from PyQt5.QtWidgets import QApplication,QMainWindow

if __name__ =='__main__':
    # 实例化一个app
    app = QApplication(sys.argv)
    # 实例化一个窗口
    mainWindow = QMainWindow()
    # 向主窗口上添加控件
    # 从demo.py的Ui_MainWindow类中,实例化一个ui对象
    ui = demo.Ui_MainWindow()
    # 使用ui对象的setupUi()函数,创建demo.py中所有的组件,参数为窗口对象
    ui.setupUi(mainWindow)
    # 显示窗口
    mainWindow.show()
    # 进入程序的主循环,并通过exit函数确保主循环安全结束
    sys.exit(app.exec_())  
# 大致的步骤
    # 1、创建应用
    # 2、创建窗口
    # 3、创建ui
    # 4、显示窗口
    # 5、进入主循环

课时23:在QTdesigner中完成信号与槽的设置

在QTdesinger中设置信号与槽,信号(signal)槽(slot),是QT的核心机制,也是PyQt的核心机制

信号:是由对象或控件发射出去的消息
按钮的单击时间,当单机按钮时,按钮就会向外发送单机消息。这些发送出去的信号需要一些代码来拦截,这些代码就是槽。槽本质上就是一个函数或者方法

信号可以理解为事件
槽可以理解为事件函数
需要将信号和槽绑定,一个信号可以与多个槽绑定,一个槽可以拦截多个信号

示例1:点击button按钮,实现关闭窗口

1、插入button按钮
2、Edit-->编辑信号/3、点击button,向下拖动
4、左侧选择点击事件clicked(),右侧选择实现的方法close()

示例2:点击Check box按钮,实现line edit的显示

1、插入Check box按钮和line edit
2、Edit-->编辑信号/3、点击Check box,向下拖动到line edit
4、左侧选择点击事件toggled(bool),右侧选择实现的方法setHidden(bool)

课时23:在QTdesigner中添加菜单和工具栏

注意:新建时,必须选择MainWindow

1、在界面右键:添加工具栏,添加状态栏
2、双击左上角的空白菜单栏进行重命名,添加子项的操作
3、实际上菜单栏里面是“动作”,点击“视图”--“动作编辑器”,可以将菜单选项拖动到菜单栏,也可以双击选项,设置属性,比如提示

课时24:使用python代码创建主窗口

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

import sys
# from typing import Mapping
from PyQt5.QtWidgets import QApplication,QMainWindow
# 图标
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QFileInfo
import PyQt5.QtGui
# 定义一个新类FirstMainWin,继承父类QMainWindow
class FirstMainWin(QMainWindow):
    def __init__(self):
        super(FirstMainWin,self).__init__()
        # 设置主窗口的标题
        self.setWindowTitle("第一个主窗口")
        # 设置主窗口的尺寸
        self.resize(400,300)
        # 获取状态栏
        self.status = self.statusBar()
        # 状态栏显示消息
        self.status.showMessage('只存在5s的消息',5000)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 获取图片的根路径,动态构造图片的位置
    root = QFileInfo(__file__).absolutePath()
    app.setWindowIcon(QIcon(root+'/icon/water.ico'))

    main = FirstMainWin()
    main.show()
    sys.exit(app.exec_())

遇到了问题:
Q:PyQt5的图标icon怎么都显示不出来
A:检查路径,动态构造路径,来自这位哥哥的博客(https://blog.csdn.net/qq_38313386/article/details/85644935)

PyQt5是一个流行的Python GUI库,可以用于开发图形界面应用程序。关于笔记本电量的问题,PyQt5可以通过调用相关的系统API来获取电池的状态和电池电量信息。 在PyQt5中,可以使用QSystemTrayIcon类来创建系统托盘图标,并通过调用QSystemTrayIcon的相关方法实现获取电池信息并显示在托盘图标上。 首先,我们需要导入PyQt5和相关的模块: ```python from PyQt5.QtWidgets import QApplication, QSystemTrayIcon, QMenu, QAction from PyQt5.QtGui import QIcon from PyQt5.QtCore import Qt, QTimer ``` 然后,我们创建一个QApplication实例和一个QSystemTrayIcon实例: ```python app = QApplication([]) tray_icon = QSystemTrayIcon(QIcon('battery_icon.png'), app) ``` 接下来,我们定义一个函数来获取电池电量信息,并将其显示在托盘图标上: ```python def update_battery_info(): battery_info = app.primaryScreen().virtualSiblings()[0].backendObject().batteryInfo() battery_percentage = battery_info.percent() battery_status = battery_info.state() tray_icon.setToolTip(f'Battery: {battery_percentage}%, Status: {battery_status}') ``` 然后,我们创建一个定时器来定期更新电池电量信息: ```python timer = QTimer() timer.timeout.connect(update_battery_info) timer.start(10000) # 10秒更新一次 ``` 最后,我们在托盘图标上创建一个菜单,并将应用程序与托盘图标关联起来: ```python menu = QMenu() exit_action = QAction('Exit', app) exit_action.triggered.connect(app.quit) menu.addAction(exit_action) tray_icon.setContextMenu(menu) tray_icon.show() app.exec_() ``` 以上代码中的battery_icon.png是一个自定义的电池图标文件,可以根据自己的需求替换。 这样,当我们运行这段代码时,就会在系统托盘中显示一个电池图标,并且会定时更新电池电量信息。当我们单击右键时,会打开一个菜单,可以选择退出应用程序。 希望这个回答对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老靳的WebGIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值