PyQt5实操及问题记录

这篇具有很好参考价值的文章主要介绍了PyQt5实操及问题记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

下载与配置

下载

下载使用pip install即可

pip install PyQt5 -i https://pypi.douban.com/simple
pip install PyQt5-tools -i https://pypi.douban.com/simple

配置

参考:跳转地址
注意:program要用项目虚拟环境内的目录,不要用下载目录

Qt Designer的使用

从external tool进入Qt designer

窗体设计

新建窗体

三类窗口的区别:
(1)、dialog有exec函数,如果是dialog窗口,后边的窗口是不可选的;这个dialog窗口只是为了给人们提供更好的可视化操作,但是对于程序员而言,这个操作并不是立刻执行的;而是当在窗口选择关闭后,才将选择的结果返回给后台,后台才可以根据选择的结果进行相应的操作。
(2)、widget主要是在上面放置布局和控件;所有用户界面对象的基类。 窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。每一个窗口部件都是矩形的,并且它们按Z轴顺序排列。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。
(3)、widget和dialog都有show函数,如果通过这个函数显示这两种类型的窗口,则两个窗口都是可选的;
(4)、mainwindow可以有menu菜单、tool工具栏、status状态栏、电脑显示屏右下脚的托盘等。提供更好的可视化操作;一个正常window软件呈现给客户的可视化界面。
PyQt5实操及问题记录,qt,数据库,开发语言

widget box简单说明

  1. Layouts:控制整体布局,水平、垂直、网格等
  2. Spacers:分隔符
  3. Buttons:各种按钮,从上往下为普通按钮(单击产生动作),工具按钮(通常显示图标),单选框,复选框,命令链接按钮,对话框按钮(OK Cancle)
  4. Containers:
    Group Box:分组框(将有类似用途的复选框和单选按钮的集合分组在一起)
    Scroll Area:滚动区域
    Tool Box:工具箱(在工具箱中提供一系列页面或者隔间)
    Stacked widget:堆叠小部件(是小部件的集合,其中只有最顶层可见。 对可见层的控制通常由另一个小部件(例如组合框)使用信号和槽来管理。处理方式和Tool Box类似)
    Tab Widget:选项卡小部件(默认情况下包含两个选项卡,可以根据需要删除或重命名这些选项卡。还可以添加其他的选项卡)
    Frame:用于封装和分组小部件,提供装饰。用作复杂容器的基础,也可以用作占位符
    Dock Widget:停靠小部件(是浮动面板,通常包含输入和更复杂的空间,要么附加到“停靠区域”中主窗口的边缘,要么作为独立工具窗口浮动)
  5. Input Widgets、Display Widgets:输入、输出的部件

使用方法

  • 通过拖动调整好窗体各部件后,如果需要进一步设置部件,选中相应部件并右键鼠标即可(如combo box中菜单的增删)
  • QWidget中font可以改变字体大小

资源浏览器添加自己的图标

  1. 创建qrc文件:
    双击 Text Brower 组件进入编辑页面,右上角的图片就是打开资源管理器。
    PyQt5实操及问题记录,qt,数据库,开发语言

引用一个随便建的 qrc 结尾的文件。
路径、别名随便填几个字母就行,然后点击添加文件(需要文件同级下有资源文件),选择一下自己的资源(图标)。
点击 ok 就资源添加完成了。
PyQt5实操及问题记录,qt,数据库,开发语言
PyQt5实操及问题记录,qt,数据库,开发语言

此时 qrc 文件已经有内容了,下次直接打开 qrc 文件就可以。

  1. 插入图标:
    以Label控件为例,添加标签控件到窗口后,在属性编辑器中找到pixmap属性,点击后面的框选择一张图片即可;
    如果需要调整图片大小,勾选下方的scaledContents即可通过调整label大小调整图像。
    最后在QT Designer保存好文件即得到我们想要的ui文件,记作window.ui。

更多关于Qt Designer的具体信息见链接

调用与调试

介绍

  1. PyQt的主要类
类名 基本信息
QObject 是所有PyQt对象的基类。
QPaintDevice 所有可绘制的对象的基类。
QApplication 用于管理图形用户界面应用程序的控制流和主要设置。无论程序有多少个窗口,该类实例化对象只有一个。它包含主事件循环,对来自窗口系统和其他资源的所有事件进行处理和调度;它也对应用程序的初始化和结束进行处理,并且提供对话管理;还对绝大多数系统范围和应用程序范围的设置进行处理。
QWidget 所有用户界面对象的基类。QDialog和QFrame继承自它。
QFrame 有框架的窗口控件的基类,它也被用来直接创建没有任何内容的简单框架。主要是用来控制一些边框样式,例如凸起、凹下、阴影、线宽等。
QDialog 对话框窗口类。是主要用于短时期任务以及用户进行简要通讯的顶级窗口(如果一个窗口控件没有被嵌入到父窗口控件中,那么该窗口控件就被称为顶级窗口控件)。
QMainWindow 提供一个有菜单栏、停靠窗口和状态栏的主应用程序窗口

除此之外,还有一些重要的子类,子类可以继承父类的功能,这里就不一一赘述了(可以参考前文中的widget box说明)。

  1. 常用函数
函数名 作用
SetWindowTitle(title) 设置窗口标题文本
SetGeometry(x,y,w,h) 设置窗口位置和大小,其中x和y是窗口左上角的坐标,w和h是窗口的宽和高
show() 显示控件或窗口
clicked.connect(slot) 将一个槽函数slot和按钮的clicked信号连接起来,点击按钮时将执行槽函数
setText(text) 设置控件文本内容
setAlignment 设置控件的文本对齐方式
setFixedSize(w, h) 设置控件的固定大小(宽度,高度)
resize(w, h) 设置控件的大小
  1. QComboBox的常用方法与信号
名称 作用
方法 addItem()、addItems() 添加下拉选项
setCurrentIndex(index) 设置默认显示的项目,index为项目的索引
currentIndex() 获取选中项的索引
currentText() 获取选中项的文本
信号 activated 在用户选中一个下拉选项时发射
currentIndexChanged 在下拉选项索引发生改变时发射
  1. QDateTimeEdit的常用方法与信号
名称 作用
方法 setDisplayFormat() 设置日期的时间格式
setMinimumDate() 设置控件的最小日期
setMaximumDate() 设置控件的最大日期
time()、date() 返回编辑的时间、日期
信号 dateChanged 当日期改变时发射
dateTImeChanged 当日期时间改变时发射
timeChanged 当时间改变时发射

转换.ui文件为.py文件

选中ui文件,使用PyUIC,会自动生成window.py文件。
注意,如果我们在窗体中使用了资源hhh.qrc文件,window.py中会出现

 import hhh_rc

而实际上我们没有hh_rc,这里需要对hhh.qrc使用pyrcc,这样会生成相应的hhh_rc.py文件

调用窗体

参考上文链接

import sys
import window1

from PyQt5.QtWidgets import QApplication,QMainWindow

if __name__ == '__main__':
    # 只有直接运行这个脚本,才会往下执行
    # 别的脚本文件执行,不会调用这个条件句

    # 实例化,传参
    app = QApplication(sys.argv)

    # 创建对象
    mainWindow = QMainWindow()

    # 创建ui,引用demo1文件中的Ui_MainWindow类
    ui = window1.Ui_MainWindow()
    # 调用Ui_MainWindow类的setupUi,创建初始组件
    ui.setupUi(mainWindow)
    # 创建窗口
    mainWindow.show()
    # 进入程序的主循环,并通过exit函数确保主循环安全结束(该释放资源的一定要释放)
    sys.exit(app.exec_())

这时出现了错误:This application failed to start because no Qt platform plugin could be initialized
解决方法:新建系统变量
变量名:QT_QPA_PLATFORM_PLUGIN_PATH
变量值:pyqtX_tools中的与designer上级bin里面的plugins文件夹路径。(直接搜索platforms,plugins下的platforms所在的位置就是变量值,注意这里用的是实际安装python时的路径)

上述代码虽然能让窗体运行,但是该窗体的功能都还没有具体定义和改造,因此,接下来我们开始实现想要的功能。这里给出一个简单的例子,目标是在点击查询后,列出给定文件位置下,给定时间之后的中文文献/英文文献:
PyQt5实操及问题记录,qt,数据库,开发语言

实现功能(信号与槽函数)

信号是一个控件在某些情况下传出的指令,槽则是在某些空间中的信号处理模块。将信号与槽函数连接后,当信号被触发时,槽函数将被自动调用。

信号与槽函数可以是内置函数,也可以是自定义函数。对于内置函数的连接等参见文档

下面详细介绍自定义信号、槽函数的编写和连接

自定义信号、槽函数的创建与连接

对象查看器——选中MainWindow(或其他顶级窗口)——右键——改变信号/槽——添加新的信号/槽click_search()
选中菜单上的edit——编辑信号/槽——长按选中pushButton并拖动至MainWindow——选择clicked()和click_search()
PyQt5实操及问题记录,qt,数据库,开发语言

将ui文件保存并转换为py文件,这里命名为window.py

自定义信号/槽函数的编写

上述操作结束后,由于我们只是建立了一个空有名字的信号/槽,因此我们需要在代码中具体编写它的功能。接下来基于window.py文件进一步编写代码。

import sys
import os
import window
import datetime
from window import Ui_MainWindow 
from PyQt5.QtWidgets import QApplication, QMainWindow


class MyWindow(QMainWindow, Ui_MainWindow):  # 继承 QMainWindow 类和 Ui_MainWindow 界面类
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)  # 初始化父类
        self.setupUi(self)  # 继承 Ui_MainWindow 界面类

	# 编写自定义槽函数
    def click_search(self):
        # 读取各个部件内的文字信息
        language = self.comboBox.currentText()
        tim = self.dateTimeEdit.dateTime().toPyDateTime()
        file_loc = self.lineEdit.text()
        # 判断文件路径格式
        if not os.path.isdir(file_loc) or "/" in file_loc:
            self.textBrowser.setText('文件位置格式错误!')
            return
        if language == 'ENGLISH':
            file_loc = file_loc + '\英文文献'
        else:
            file_loc = file_loc + '\中文文献'
        files = os.listdir(file_loc)
        self.textBrowser.append('创建时间在选中时间之后的文献有: \n')
        for f in files:
            path = os.path.join(file_loc, f)
            ctime = os.path.getctime(path)
            if datetime.datetime.fromtimestamp(ctime) >= tim:
                self.textBrowser.append(f + '\n')
        self.textBrowser.append('查询结束\n')
        return


if __name__ == '__main__':
    # 实例化,传参
    app = QApplication(sys.argv)
    mainWindow = MyWindow()

    # 创建ui,引用demo1文件中的Ui_MainWindow类
    mainWindow.show()
    sys.exit(app.exec_())

PyQt5实操及问题记录,qt,数据库,开发语言
运行顺利。如果运行中出现闪退,那就是代码出现了问题,可以通过以下方式查看traceback:
运行键下方点击Modify Run Configuration——选中emulated terminal in output console——点击OK——重新运行代码即可看到错误提示了。

一些补充

  1. textBrowser实时显示内容
def printf(mes):
    self.textBrowser.append(mes)  # 在指定的区域显示提示信息
    self.cursot = self.textBrowser.textCursor()
    self.textBrowser.moveCursor(self.cursot.End)
    QApplication.processEvents()

直接调用上述函数即可
原文链接文章来源地址https://www.toymoban.com/news/detail-666570.html

  1. 部件随窗口大小变化而变化
    在窗体部分右键,并设置为Grid LayOut即可,但是布局会大幅度改变(不美观)

到了这里,关于PyQt5实操及问题记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux:使用sed命令替换文件内容实操及各种报错问题解决

    工作遇到需要在页面一键操作,后端进行自动化运维部署的事情,这里就用的了 sed 命令,linux的学问真的要花时间好好学习一番了! 上面图片是AI创作生成!如需咒语可私戳哦! 以下为实际工作简化后描述 简要说明下流程 原来的流程 : 每次新增连接服务,都要进行命令行

    2023年04月09日
    浏览(75)
  • 界面开发(3)--- PyQt5用户登录界面连接数据库

    为了实现用户登录界面的登录功能,我们必须建立一个数据库,并把账号和对应的密码,存储到数据库中。如果输入的账号和密码与数据库中的一致,那我们就允许用户登录,进入新的界面。 上篇文章介绍了如何使用PyQt5制作用户登录界面,这篇文章在此基础上展开,建立简

    2024年02月05日
    浏览(52)
  • PyQt5数据库开发1 4.1 SQL Server 2008 R2如何开启数据库的远程连接

    文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式

    2024年02月22日
    浏览(64)
  • 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    Python语言、dlib、OpenCV、Pyqt5界面设计、sqlite3数据库      本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如果两张图片来源于同一个人,那么两个图片所映射的空间向量距离就很近,否则就会很远。因此,可以通过提取图片并

    2024年02月05日
    浏览(63)
  • 数据库系统课设——基于python+pyqt5+mysql的酒店管理系统(可直接运行)--GUI编程

    几个月之前写的一个项目,通过这个项目,你能学到关于数据库的触发器知识,python的基本语法,python一些第三方库的使用,包括python如何将前后端连接起来(界面和数据),还有界面的设计等等。希望大家能从项目中学到东西。 宾馆管理系统通过提供顾客和员工信息之间的

    2024年02月05日
    浏览(48)
  • 数据库系统课设——基于python+pyqt5+mysql的酒店管理系统(可直接运行)--GUI编程(2)

     几个月之前写的一个项目,通过这个项目,你能学到关于数据库的触发器知识,python的基本语法,python一些第三方库的使用,包括python如何将前后端连接起来(界面和数据),还有界面的设计等等。希望大家能从项目中学到东西。 宾馆管理系统通过提供顾客和员工信息之间

    2024年02月03日
    浏览(54)
  • Pyqt5开发实战记录

    入职以来第一个开发项目: 1、如何给Qlabel加边框:右键label对象,选择“改变样式表”输入一下代码: 2、如何让垂直布局中button大小不发生变化:其实很简单,只需要设置button的最大值和最小值固定就可以了。 3、如何让图片自适应Qlabel的大小呢?有时候我们的图片太大了

    2024年02月11日
    浏览(37)
  • python人脸识别考勤系统 dlib+OpenCV和Pyqt5、数据库sqlite 人脸识别系统 计算机 毕业设计 源码

    Python语言、dlib、OpenCV、Pyqt5界面设计、sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如果两张图片来源于同一个人,那么两个图片所映射的空间向量距离就很近,否则就会很远。因此,可以通过提取图片并映射到

    2024年02月08日
    浏览(51)
  • PyQt5+Qt设计师初探

            在上一篇文章中我们搭建好了PyQt5的开发环境,打铁到趁热我们基于搭建好的环境来简单实战一把 PyQt5包括的主要模块如下。 QtCore模块——涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及的时间、文件、目录、数据类型、文本流、链接、QMimeData、线程或

    2024年02月07日
    浏览(45)
  • mac python3.9安装pyqt5、qt5、pyqt5-tools

    pyqt6安装参考 PyQT6:看这一篇就够了 python PyQt6 常用操作以及常见问题解决 pycharm配置tools 参考链接 以下pip命令自行更具自己环境选择pip或pip3 在安装pyqt前必须先安装sip包 完成sip的安装后,安装pyqt和pyqt-tools, 可以直接使用命令: 若是使用pip3安装报错 AttributeError: module ‘sipb

    2024年02月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包