当前位置: 首页 > news >正文

低代码软件搭建自学的第一天——熟悉PyQt

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 学习计划
  • 第 1 步:环境搭建
    • 1.1 安装 Python
    • 1.2 安装 PyQt
      • 安装命令:
      • 验证安装:
  • 第 2 步:PyQt 基础知识
    • 2.1 创建第一个窗口
      • 代码示例:简单窗口
      • 运行结果:
    • 2.2 添加基础组件
      • 代码示例:添加按钮和标签
      • 运行结果:
    • 2.3 布局管理
      • 常用布局管理器:
      • 代码示例:使用垂直布局管理器
      • 运行结果:
    • 2.4 多窗格布局(Splitter)
      • 代码示例:多窗格布局
      • 运行结果:
    • 小结


大三小伙要在备战考研的一年内利用闲余时间从零开始学习 PyQt 并逐步构建一个类似 Visio 风格的低代码软件项目去实现神经网络的拖拽式搭建。先从最基础的内容开始。


学习计划

  1. 环境搭建:安装必要的工具和库。
  2. PyQt 基础知识
    • 如何创建一个简单的窗口。
    • 添加按钮、标签等基础组件。
    • 布局管理(排列组件)。
  3. 高级功能
    • 设计拖拽式界面(核心功能)。
    • 绘图和连线功能(实现类似 Visio 的画布)。
    • 多窗格布局和选项卡(实现类似 PyCharm 的界面)。
  4. 实际应用
    • 集成代码生成功能。
    • 导出设计为图片和对应网络代码。
    • 打包为 EXE 文件。

第 1 步:环境搭建

1.1 安装 Python

  • 从 Python 官网 下载并安装 Python(建议版本 3.8 及以上)。我暂时用的3.10。
  • 安装时勾选 “Add Python to PATH”。

1.2 安装 PyQt

PyQt 是一个基于 Qt 库的 Python GUI 框架。

安装命令:

pip install PyQt6

验证安装:

在终端或命令行中运行以下代码,查看是否安装成功:

import PyQt6
print(PyQt6.__version__)  # 输出版本号表示安装成功

第 2 步:PyQt 基础知识

2.1 创建第一个窗口

PyQt 的核心类是 QApplicationQMainWindow。我们可以从这些类开始。

代码示例:简单窗口

创建一个基础窗口并运行。

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow# 创建主窗口类
class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("我的第一个 PyQt 窗口")self.setGeometry(100, 100, 800, 600)  # 设置窗口位置和大小# 创建应用程序
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

运行结果:

  • 打开一个 800x600 的基础窗口,标题为“我的第一个 PyQt 窗口”。
  • 程序运行后,关闭窗口即可结束。
    在这里插入图片描述

2.2 添加基础组件

我们在窗口中添加按钮、标签等基础组件。

代码示例:添加按钮和标签

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButtonclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("添加组件示例")self.setGeometry(100, 100, 400, 300)# 添加标签self.label = QLabel("欢迎使用 PyQt!", self)self.label.setGeometry(100, 50, 200, 50)  # 设置标签的位置和大小# 添加按钮self.button = QPushButton("点击我", self)self.button.setGeometry(100, 150, 100, 50)self.button.clicked.connect(self.on_button_click)  # 按钮点击事件def on_button_click(self):self.label.setText("按钮被点击了!")# 创建应用程序
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

运行结果:

  • 窗口中有一个标签和一个按钮。
  • 点击按钮后,标签文字会变成“按钮被点击了!”。
    在这里插入图片描述

2.3 布局管理

当组件较多时,手动设置每个组件的位置非常麻烦。PyQt 提供了 布局管理器 来自动管理组件的排列。

常用布局管理器:

  1. QVBoxLayout(垂直排列)。
  2. QHBoxLayout(水平排列)。
  3. QGridLayout(网格排列)。

代码示例:使用垂直布局管理器

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabelclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("布局管理示例")self.setGeometry(100, 100, 300, 200)# 创建主控件和布局central_widget = QWidget()  # 主控件layout = QVBoxLayout()  # 垂直布局central_widget.setLayout(layout)  # 将布局设置到主控件# 添加组件到布局self.label = QLabel("这是一个标签")layout.addWidget(self.label)button = QPushButton("点击更改标签")button.clicked.connect(self.change_label_text)layout.addWidget(button)self.setCentralWidget(central_widget)  # 将主控件设置为窗口中央控件def change_label_text(self):self.label.setText("标签已更改!")# 创建应用程序
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

运行结果:

  • 标签和按钮会按照垂直方向自动排列。
  • 点击按钮会修改标签文字。
    在这里插入图片描述

2.4 多窗格布局(Splitter)

在实际项目中,我们需要实现类似 PyCharm 的多窗格布局,可以使用 QSplitter

代码示例:多窗格布局

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QSplitter, QTextEdit, QListWidget
from PyQt6.QtCore import Qtclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("多窗格布局示例")self.setGeometry(100, 100, 800, 600)# 创建分割器splitter = QSplitter(Qt.Orientation.Horizontal, self)# 左侧:列表list_widget = QListWidget()list_widget.addItems(["项目1", "项目2", "项目3"])splitter.addWidget(list_widget)# 右侧:文本编辑器text_edit = QTextEdit()splitter.addWidget(text_edit)self.setCentralWidget(splitter)  # 设置分割器为中央控件# 创建应用程序
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

运行结果:

  • 左侧是一个列表控件,右侧是一个文本编辑器。
  • 中间的分割条可以拖动调整两部分的大小。
    在这里插入图片描述

小结

通过以上内容,掌握 PyQt 的基础知识:

  1. 如何创建窗口。
  2. 如何添加按钮、标签等基础组件。
  3. 使用布局管理器自动排列组件。
  4. 创建多窗格布局。

相关文章:

低代码软件搭建自学的第一天——熟悉PyQt

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 学习计划第 1 步:环境搭建1.1 安装 Python1.2 安装 PyQt安装命令:验证安装: 第 2 步:PyQt 基础知识2.1 创建第一个窗…...

基于Python3编写的Golang程序多平台交叉编译自动化脚本

import argparse import os import shutil import sys from shutil import copy2from loguru import loggerclass GoBuild:"""一个用于构建跨平台执行文件的类。初始化函数,设置构建的主文件、生成的执行文件名称以及目标平台。:param f: 需要构建的…...

远程桌面连接

电脑A:使用机 电脑B:被控制的另一个 方法1: 在电脑B上操作 ①winr输入cmd进入命令行窗口,输入ipconfig查询本机地址 ②我的电脑/此电脑 右键点击“属性” ③选择屏幕右边“远程桌面” ④打开“启用远程桌面” ⑤打开设置&am…...

网络地址转换NAT

NAT(Network Address Translation) 方法于1994年提出。需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球地址IPG。 所有使用本地地址的主机在和外界通信时都要在NAT路由器上将其本地地址转换成外部全球…...

什么是CRM管理软件?CRM的基本概念、功能、选择标准、应用场景

什么是CRM管理软件? 嘿,大家好!今天咱们聊聊一个在现代企业管理中非常重要的工具——CRM管理软件。CRM是Customer Relationship Management(客户关系管理)的缩写,简单来说,它就是一个帮助企业和…...

Python编程常用的19个经典案例

Python 的简洁和强大使其成为许多开发者的首选语言。本文将介绍36个常用的Python经典代码案例。这些示例覆盖了基础语法、常见任务、以及一些高级功能。 1. 列表推导式 fizz_buzz_list ["FizzBuzz" if i % 15 0 else "Fizz" if i % 3 0 else "Buzz…...

【Unity基础】AudioSource 常用方法总结

在 Unity 中,AudioSource 组件用于控制音频的播放和管理。以下是常用的 AudioSource 控制方法及其说明。 1. 播放和暂停音频 Play():开始播放音频,如果是从暂停的地方继续播放,可以直接调用。Pause():暂停当前播放的…...

CSS系列(25)-- 滚动优化详解

前端技术探索系列:CSS 滚动优化详解 📜 致读者:探索流畅滚动的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 滚动优化,学习如何创建流畅、高性能的滚动体验。 平滑滚动 🚀 基础设置 /* …...

CST天线设计的六大核心特点:为天线分析提供完整解决方案!

CST Studio Suite 为天线设计提供了从最初的概念评估到最终的合规性测试所需的所有功能,确保天线设计在各种环境下实现稳定通信。这一套工具覆盖了所有重要的设计阶段,帮助设计师顺利完成从概念到成品的全过程。 下面我们来看一看CST电磁仿真中天线设计…...

Ubuntu下C语言操作kafka示例

目录 安装kafka: 安装librdkafka consumer Producer 测试运行 安装kafka: Ubuntu下Kafka安装及使用_ubuntu安装kafka-CSDN博客 安装librdkafka github地址:GitHub - confluentinc/librdkafka: The Apache Kafka C/C library $ apt in…...

怎么将pdf中的某一个提取出来?介绍几种提取PDF中页面的方法

怎么将pdf中的某一个提取出来?传统上,我们可能通过手动截取屏幕或使用PDF阅读器的复制功能来提取信息,但这种方法往往不够精确,且无法保留原文档的排版和格式。此外,很多时候我们需要提取的内容可能涉及多个页面、多个…...

HTTP接口报错详解与解决 200,500,403,408,404

前言: 仅做学习记录,侵删 背景 当后端编写接口时,经常需要对接口使用ApiFox或者PostMan进行测试,此时就会出现各种各样的报错,一般都会包括报错编码:200,400,401等。这个状态码一般是服务器所返回的包含…...

监控IP频繁登录服务器脚本

该脚本的作用是监控IP登录失败次数,如果某个IP的登录失败次数超过设定的最大次数,则阻止该IP的进一步登录尝试。通过iptables防火墙阻止连接,当一个IP尝试登录次数超过5次时,iptables会阻止来自该IP的所有连接 #!/bin/bashfuncti…...

分布式链路追踪-03-Jaeger、Zipkin、skywalking 中的 span 是如何设计的?

开源项目 auto-log 自动日志输出 Jaeger、Zipkin 中的 spanId 是如何生成的? 在 Jaeger 和 Zipkin 这两个分布式跟踪系统中,Span ID 是通过不同的方法生成的。 下面分别介绍它们的生成方式: Jaeger 中的 Span ID 生成: 在 Ja…...

【达梦数据库】获取对象DDL

目录 背景获取表的DDL其他 背景 在排查问题时总会遇到获取对象DDL的问题,因此做以下总结。 获取表的DDL 设置disql工具中显示LONG类型数据的最大长度,避免截断: SET LONG 9999获取DDL SELECT DBMS_METADATA.GET_DDL(TABLE,表名,模式名) …...

InnoDB和MyISAM引擎优缺点和区别

nnoDB和MyISAM是MySQL数据库中常用的两种存储引擎。它们各自具有不同的特性和优势,适用于不同的应用场景。 一、InnoDB引擎: 1、它有如下特性: 1)、支持事务(ACID) 2)、支持外键约束(FOREIGN KEY const…...

文件上传知识点汇总

归纳总结一下文件上传(其实是懒得写wp) 基于Dream ZHO师傅的CTF show 文件上传篇(web151-170,看这一篇就够啦)-CSDN博客 和dota_st 师傅的ctfshow-Web1000题系列修炼(一) | dota_st 做一篇自己的总结 目录 一、什么…...

计算机网络技术基础:5.数据通信系统

一、数据通信的基本概念 1.信息 信息是对客观事物的运动状态和存在形式的反映,可以是客观事实的形态、大小、结构、性能等描述,也可以是客观事物与外部之间的联系。信息的载体可以是数字、文字、语音、图形和图像等。计算机及其外围设备产生和交换的信息…...

光谱相机在农业的应用

一、作物生长监测1、营养状况评估 原理:不同的营养元素在植物体内的含量变化会导致植物叶片或其他组织的光谱反射率特性发生改变。例如,氮元素是植物叶绿素的重要组成部分,植物缺氮时,叶绿素含量下降,其在可见光波段&a…...

高考志愿填报:如何制定合理的志愿梯度?

高考志愿填报中常见的避雷行为,深入分析了专业选择、招生政策了解、学校选择、备选方案准备以及防诈骗等方面的关键问题,并提出了针对性的建议与策略。旨在为考生和家长提供实用的指导,助力考生科学合理地填报高考志愿,避免陷入各…...

Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆角矩形实现,Kotlin(1)

Android基于Path的addRoundRect&#xff0c;Canvas剪切clipPath简洁的圆角矩形实现&#xff0c;Kotlin&#xff08;1&#xff09; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res…...

webGL硬核知识:图形渲染管渲染流程,各个阶段对应的API调用方式

一、图形渲染管线基础流程概述 WebGL 的图形渲染管线大致可分为以下几个主要阶段&#xff0c;每个阶段都有其特定的任务&#xff0c;协同工作将 3D 场景中的物体最终转换为屏幕上呈现的 2D 图像&#xff1a; 顶点处理&#xff08;Vertex Processing&#xff09;阶段&#xff1…...

区块链详解

1. 概述 1.1 什么是区块链&#xff1f; 区块链是一种分布式数据库技术&#xff0c;它以链式数据结构的形式存储数据&#xff0c;每个数据块与前一个数据块相关联&#xff0c;形成了一个不断增长的数据链。每个数据块中包含了一定数量的交易信息或其他数据&#xff0c;这些数据…...

【EXCEL 逻辑函数】AND、OR、XOR、NOT、IF、IFS、IFERROR、IFNA、SWITCH

目录 AND&#xff1a;当所有条件都为真时返回 TRUE&#xff0c;否则返回 FALSE OR&#xff1a;当任一条件为真时返回 TRUE&#xff0c;否则返回 FALSE XOR&#xff1a;当奇数个条件为真时返回 TRUE&#xff0c;否则返回 FALSE NOT &#xff1a;反转逻辑值 IF&#xff1a;根…...

ubuntu下gdb调试ROS

参考&#xff1a; 使用VsCode进行ROS程序调试_ros vscode 调试-CSDN博客 https://blog.csdn.net/weixin_45031801/article/details/134399664?spm1001.2014.3001.5506 一、调试准备 1.1 CMakeLists改动 注释文件中的 set(CMAKE_BUILD_TYPE "Release") #构建类…...

Docke_常用命令详解

这篇文章分享一下笔者常用的Docker命令供各位读者参考。 为什么要用Docker? 简单来说&#xff1a;Docker通过提供轻量级、隔离且可移植的容器化环境&#xff0c;使得应用在不同平台上保持一致性、易于部署和管理&#xff0c;具体如下 环境一致性&#xff1a; Docker容器使得…...

使用vue2.0或vue3.0创建自定义组件

Vue2.0创建自定义组件 在 Vue 2.0 中创建自定义组件是一个相对简单的过程。以下是一个详细的步骤指南&#xff0c;帮助你创建一个自定义组件。 步骤 1: 创建 Vue 组件文件 首先&#xff0c;你需要创建一个新的 Vue 文件&#xff08;.vue 文件&#xff09;。假设我们要创建一…...

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…...

【Linux】重启系统后开不开机(内核模块丢失问题)

问题 重启后开不开机报错如下&#xff1a; FAILED failed to start load kernel moduiles 可以看到提示module dm_mod not found 缺少了dm_mod 在内核module目录中 reboot重启可以看到这个现象&#xff1a; 可以看到重启启动磁盘&#xff0c;加载不到root 原因 dm_mod模块…...

对golang的io型进程进行off-cpu分析

背景&#xff1a; 对于不能占满所有cpu核数的进程&#xff0c;进行on-cpu的分析是没有意义的&#xff0c;因为可能程序大部分时间都处在阻塞状态。 实验例子程序&#xff1a; 以centos8和golang1.23.3为例&#xff0c;测试下面的程序&#xff1a; pprof_netio.go package m…...