热门文章
推广宣传
最新发布
-
免费分享多功能实用工具箱微信小程序源码 - 可变现工具类小程序资源 多功能实用工具箱微信小程序源码:免费开源资源分享 给大家免费分享一款超实用的微信小程序资源——多功能实用工具箱大全微信小程序源码!无需付费,个人开发者、小型团队都能免费获取,不管是学习小程序开发、快速搭建工具类产品,还是做创业项目孵化、个人副业变现,都是性价比超高的优质资源! mjr16vnj.png图片 一、核心资源信息 技术架构(资源核心配置):基于微信小程序原生开发,是综合性工具集合类项目,源码结构清晰、模块化设计合理,维护和二次开发都很方便,拿来就能按需调整功能。 部署便捷性(资源使用优势):不用配置服务器,也不用购买域名,直接在微信开发者工具中导入就能运行;数据可存在本地缓存,也能通过小程序云开发实现轻量级后端,零成本就能上线,技术门槛极低。 二、核心功能资源(免费解锁全能工具体验) 丰富工具集合:内置超多日常生活常用工具,比如单位换算、天气查询、快递查询、二维码生成器、日历提醒,还有手机清灰、震动手机、闪光灯、水平尺、各种计算器(房贷、工资、血型、亲戚关系等)、垃圾分类查询、网络测速等实用功能;还支持自定义添加新工具模块,后续想扩展功能也很灵活。 变现与推广功能:支持接入微信小程序官方流量主广告(包括Banner广告、激励视频广告等),能通过广告变现赚收益,特别适合个人副业或商业项目;首页可自定义轮播图,能用来做宣传推广、活动引导,轮播图还能配置跳转链接(内部页面或第三方小程序),支持跨平台导流,方便搭建小程序矩阵。 灵活扩展特性:所有功能模块都是独立封装的,提供详细注释和文档说明,就算是新手也能轻松上手二次开发;UI界面也是模块化设计,能根据需求重新设计主题风格,满足个性化需求。 三、资源特色(免费资源优势拉满) 免费可商用:源码完全开源,没有加密、没有使用限制,开发者能自由使用、修改和发布,不管是学习、教学演示,还是创业项目都能用。 低门槛零成本:不依赖服务器和数据库,省去运营成本;支持微信云开发,进一步简化后端逻辑,新手也能快速上线。 变现能力突出:快速接入流量主广告,轻松实现商业变现,是个人副业赚钱、小型团队创业的好选择。 高度可定制:功能模块能按需增删改查,界面风格可自由调整,灵活适配不同使用场景和需求。 体验友好:界面简洁直观,操作流程符合微信小程序用户使用习惯,工具分类清晰、搜索便捷,能提升用户留存率。 四、资源适用场景(免费资源适配多需求) 这款免费分享的源码用途特别广: 新手开发者:用来学习微信小程序开发技巧,熟悉模块化设计和功能封装; 个人用户:搭建专属工具类小程序,自用或分享给好友,提升生活效率; 创业者/小型团队:快速孵化工具类创业项目,借助广告变现和导流功能实现盈利; 教学场景:作为教学演示案例,帮助学员理解小程序开发逻辑和变现模式; 副业刚需:打造能赚钱的工具类小程序,利用流量主广告实现被动收入。 获取源码 微信实用工具箱集...程序源码.zip 下载地址:https://pan.quark.cn/s/045b6d30fcd8 提取码:1hb5 免费无套路,功能丰富又好部署,不管是直接使用还是二次开发,都能满足各类需求,强烈推荐大家获取体验! -
免费分享PHP仿微信即时聊天系统源码 - 支持音视频的多端通讯资源 PHP仿微信即时聊天系统源码:免费开源资源分享 给大家免费分享一款功能超全面的即时通讯资源——PHP仿微信即时聊天系统源码!无需付费,企业、开发者或有社交/沟通需求的用户都能免费获取,高度还原微信核心交互体验,不管是搭建内部沟通平台、社交社区,还是做在线客服、教育医疗行业的即时通讯解决方案,都是性价比拉满的优质资源! mjr13q1b.png图片 一、核心资源信息 技术架构(资源核心配置):基于PHP技术栈构建,采用前后端分离架构,后端通过PHP + MySQL + Redis + Workerman组合实现消息服务与业务逻辑,技术成熟稳定,拿来就能按需部署或二次开发。 服务器环境要求(资源部署适配):需搭配Linux OS(推荐CentOS 7.9)、Nginx(推荐最新稳定版)、PHP 7.3(兼容7.1及以上,不支持7.4+)、MySQL 5.7+、Redis 5.0+(推荐7.0)、Workerman 4.0+、Node.js 14.0+(推荐16.x)及npm 7.0+,满足配置即可稳定运行。 二、核心功能资源(免费解锁全能通讯体验) 全能聊天功能:单聊支持发送表情、图片、语音、视频、文件等多媒体消息,显示消息已读/未读状态和用户在线状态;群聊可创建/解散群组、管理成员(添加/移除)、设置群公告与禁言,管理员能撤回成员消息,还能限制群成员互加好友,保护隐私。 音视频通话:支持一对一音视频通话,已打通Web端与移动端,实现跨平台互通(小程序暂不支持该功能),满足实时沟通需求。 灵活消息设置:支持联系人置顶、消息免打扰、新消息声音提醒和浏览器通知推送,还能自定义消息接收方式,适配不同使用场景。 媒体与文件预览:支持文件、图片及大部分媒体格式在线预览,不用下载就能查看,大幅提升使用体验。 多端适配支持:兼容Web端、H5页面、原生APP安装使用,也支持小程序访问(部分功能受限),随时随地都能使用。 双模式自由切换:企业模式强调权限管理和信息保密,适合公司或组织内部使用;社区模式支持开放注册、用户自主加好友,适合搭建社交类平台。 消息推送与后台管理:APP支持单聊消息在线/离线推送(需自行配置Unipush服务);自带简易实用的后台管理界面,可实现用户管理、群组管理、系统设置、权限控制等功能。 三、资源特色(免费资源优势突出) 多端兼容性强:覆盖Web、H5、APP、小程序(部分功能),满足多样化部署需求,不管是电脑还是手机,都能顺畅使用。 微信风格UI设计:界面简洁直观,操作逻辑和微信高度契合,用户不用额外学习就能上手,降低使用门槛。 即时通信性能优异:基于Workerman构建实时消息服务,响应迅速且稳定,不会出现消息延迟、卡顿等问题。 数据安全有保障:支持群成员互加限制、消息撤回、权限分级等安全管理措施,兼顾隐私保护与信息管控。 易于二次开发:代码结构清晰,文档完整,不用复杂改动就能定制功能或扩展业务场景,适配不同需求。 四、资源适用场景(免费资源适配多需求) 这款免费分享的源码用途十分广泛: 企业/组织:搭建内部沟通平台,强调权限管理和信息保密,提升协作效率; 创业者/开发者:打造社交社区平台,支持用户注册、加好友、群聊等功能,快速落地社交项目; 行业解决方案:用于在线客服、教育辅导、医疗咨询等场景,实现实时沟通互动; 个性化需求:基于源码二次开发,定制专属即时通讯功能,适配更多细分场景。 源码获取 PHP仿微信聊天源码 下载地址:https://pan.quark.cn/s/77907e4d3481 提取码:V38p 免费无套路,功能全面且易部署,不管是直接使用还是二次开发,都能满足各类即时通讯需求,强烈推荐大家获取体验! -
免费分享HTML白色大气SEO优化公司网站源码 - 响应式企业建站模板 HTML白色大气SEO优化公司网站源码:免费开源资源分享 给大家免费分享一款超适合SEO相关企业的网站源码——HTML白色大气专业SEO排名优化公司网站模板!无需付费,SEO优化服务公司、网络营销机构、数字广告公司等企业,或是开发者、设计师,都能免费获取使用,不管是搭建企业官网、展示服务案例,还是对外宣传推广,都是实用性拉满的优质资源! mjr0xyjo.png图片 一、核心资源信息 技术架构(资源核心配置):基于HTML5 + CSS3 + JavaScript原生技术构建,不依赖复杂框架,上手门槛低;支持灵活扩展jQuery或Bootstrap插件,还能模块化开发,后续二次开发和维护都很方便,拿来就能按需调整。 适配与兼容(资源使用便捷性):采用响应式布局,能完美适配PC、平板、手机等多终端设备,满足移动端流量需求;同时兼容Chrome、Firefox、Safari、Edge等主流浏览器,确保不同用户访问体验一致,无需担心兼容性问题。 二、核心资源特色(免费解锁优质体验) 视觉风格专业大气:以纯白色为主色调,搭配深紫等色系,整体设计简洁利落,既显科技感又能传递信任感;动画过渡自然流畅,视觉吸引力强,配色方案统一,契合企业品牌调性,用作对外展示门面超合适。 SEO优化友好:页面结构采用语义化设计,利于搜索引擎收录;页面标题、关键词、描述标签可自定义设置,方便针对性优化;还做了静态资源优化(比如压缩CSS、JS、图片懒加载等),进一步提升SEO效果。 技术简洁高效:原生技术栈不冗余,开发和部署都很便捷;支持模块化扩展,想要添加更多交互功能也能轻松实现,不用额外投入过多技术成本。 mjr0wy4o.png图片 三、资源适用场景(免费资源适配多需求) 这款免费分享的网站源码,适用场景十分广泛: SEO优化服务公司搭建官方网站,展示企业形象和服务; 数字营销机构、网络推广公司制作展示站点,呈现业务范围和案例; 内容营销团队打造作品集,对外展示成果; 各类需要宣传数字营销、Web设计开发等业务的企业,用作宣传站点。 获取源码 HTML 白色大气 SEO 优化公司网站源码 下载地址:https://pan.quark.cn/s/1fe495a2d51a 提取码:67CQ 结语 不管是直接部署使用,还是基于源码二次开发定制专属功能,都能满足需求,免费无套路,是企业建站的高性价比选择! -
源支付V7 – V1.9.8免授权版安装包 行业聚合免签系统,凭借出色的系统性能、个性化的后台操作以及丰富多样的系统功能,攻克个人站长在知识付费与运营赞助方面的难关。其全新的轻量化界面 UI 能带来更为便捷高效的浏览感受,感兴趣的朋友可自行部署! 文字文档 文字文档 - https://umil.yuque.com/hqp3qz/wlewvo 20251228171126618-1-1024x549.webp图片 源支付V7 – V1.9.8免授权版安装包 下载地址:https://pan.baidu.com/s/1z84otQWkJw9N-llOqTdusw?pwd=040n 提取码:040n 源支付V7 – V1.9.8免授权版安装包 下载地址:https://pan.quark.cn/s/caa5d79a59e0 提取码:YDE8 -
NetworkPanel开源资源免费分享 - Vue3网速测速+IP查询Docker部署工具 NetworkPanel开源资源免费分享:Vue3网速测速+IP查询实用工具 给大家免费分享一款超实用的开源网络工具资源——NetworkPanel!它是基于Vue3技术栈开发的网速测速与IP地址查询工具,无需付费,个人、企业或开发者都能免费获取使用,不管是日常测网速、查IP,还是搭建专属网络工具平台,都是性价比超高的优质资源! mjr0paze.png图片 一、核心资源信息 技术架构(资源核心配置):前端采用Vue3 + TypeScript组合,搭配Vite + pnpm构建工具,不仅代码结构清晰、类型安全,开发和构建效率也大幅提升;还支持腾讯EdgeOne CDN优化加载速度,自带PWA离线访问能力,就算没网络也能应急使用,技术配置拉满且拿来即用。 部署支持(资源使用便捷性):提供多种零门槛部署方案,新手也能轻松上手——静态部署解压就能直接上线;Docker部署只需执行简单命令docker run -d --rm -p 8080:80 netart/network-panel:latest,一键就能启动;还支持腾讯云等云平台一键部署,不用复杂配置,快速就能用起来。 项目结构(资源二次开发友好):采用模块化设计,核心目录划分清晰,包含核心源码、静态资源、CI/CD配置、Docker构建配置等,还附带详细的说明文档,免费分享的源码支持自由二次开发和功能扩展,轻松满足个性化需求。 二、核心功能资源(免费解锁实用工具) 网速测速功能:支持设定测速数据量完成定量测试,多线程并发测速让测试效率更高,还能兼容iOS后台运行,移动端使用也顺畅不中断,免费获取就能拥有专业级测速体验。 IP地址查询功能:可查询多出口IP信息,适配多运营商网络环境,能清晰显示IP对应的地理位置、ISP、经纬度等详细内容,不管是排查网络问题还是了解IP归属,都特别实用。 自定义节点管理:支持添加自定义测速节点,还能动态切换和管理节点,灵活扩展测速网络覆盖范围,适配不同地区、不同网络场景的使用需求。 灵活配置功能:运行过程中能随时调整线程数量,不用重启就能生效;后台运行开关状态会自动保存,下次使用无需重新设置,使用体验更便捷。 三、资源特色(免费资源优势突出) 技术栈优质:基于Vue3 + TypeScript开发,代码质量有保障,后续维护和扩展也方便,免费资源也能拥有高品质体验; 可定制性强:支持自定义测速节点、灵活配置线程数和后台运行状态,不管是个人简单使用,还是企业定制化部署,都能满足; 部署零门槛:多种部署方式任选,无需复杂技术知识,静态部署、Docker部署或云平台部署都能快速完成,上手无压力; 体验出色:界面设计简洁直观,操作逻辑清晰,还删除了冗余统计脚本,加载速度更快;PWA特性让移动端访问更流畅,不管是电脑还是手机用都舒服。 源码下载 点击打开演示站 下载 下载地址:https://pan.quark.cn/s/ced31eb95857 提取码:kgHx 四、资源适用场景(免费资源适配多需求) 这款免费分享的NetworkPanel开源资源,用途特别广:个人用户可用来测试网络速度、查询IP详细信息,解决日常网络使用疑问;企业可借助它搭建多出口网络监控平台,实时掌握网络状态;开发者可基于源码二次开发,扩展更多个性化功能。无套路免费获取,实用性拉满,强烈推荐大家试试! -
WordPress插件 – 高级前端访问控制插件 此乃一款功能强劲、界面精美的WordPress插件,专为企业内部网站量身打造,可提供专业的前端访问控制解决办法。该插件借助密码保护、会话管理以及IP限制等安全功能,保障仅授权人员可访问网站内容。 20251228172038898-1-1024x477.webp图片 20251228172042848-2-1024x518.webp图片 20251228172045615-3-1024x521.webp图片 WordPress插件 – 高级前端访问控制插件 下载地址:https://pan.quark.cn/s/68d0fcc1dc7e 提取码:CNME -
阶段一实战项目:仿照记事本开发简易文本编辑器(PyQt5完整代码) 阶段一实战项目:仿照记事本界面开发简易文本编辑器 哈喽~ 欢迎来到PyQt5系列的第5篇——阶段一实战项目!经过前4篇的学习,我们已经掌握了QWidget基础窗口、线性布局(QVBoxLayout/QHBoxLayout)、核心基础控件(标签、按钮、输入框、复选框等)以及信号与槽的基础用法。今天我们将把这些知识点整合起来,仿照Windows记事本的核心界面与基础功能,开发一个简易文本编辑器,实现“新建、打开、保存文本”“文本编辑”“字体加粗”等核心功能,让你快速掌握知识点的综合应用! mjr0cjri.png图片 一、项目需求分析:仿照记事本核心功能 我们聚焦Windows记事本的核心功能,本次项目实现以下需求: 界面需求:仿照记事本布局,包含“功能按钮区”(新建、打开、保存、字体加粗)和“文本编辑区”(多行文本输入/显示); 核心功能:新建空白文本、打开本地文本文件、保存文本到本地、文本加粗编辑; 交互需求:按钮点击反馈、打开/保存文件弹窗提示、文本编辑实时响应; 适配需求:窗口缩放时,文本编辑区自适应调整大小。 【界面参考】Windows记事本核心布局:顶部功能按钮区 + 中间大面积文本编辑区,我们简化实现核心按钮,保证界面简洁且功能完整。 mjr06wos.png图片 二、技术选型:贴合阶段一知识点 本次项目严格基于阶段一所学知识点,不引入新的复杂组件,技术栈如下: 窗口组件:QWidget(主窗口); 布局管理器:QVBoxLayout(垂直布局,管理按钮区和编辑区)、QHBoxLayout(水平布局,排列功能按钮); 核心控件:QPushButton(功能按钮)、QTextEdit(多行文本编辑区)、QCheckBox(字体加粗选择框); 交互核心:信号与槽(按钮点击、复选框状态变化绑定对应功能); 文件操作:基础文件读写(结合Python内置open函数)。 三、界面设计与实现步骤 我们采用“先搭框架,再填功能”的思路,分3步实现: 搭建主窗口与布局(垂直布局+水平布局组合); 添加控件(功能按钮、复选框、文本编辑区)并绑定布局; 实现控件信号与槽绑定,编写功能逻辑。 四、完整代码实现(可直接运行) mjr0a9z8.png图片 import sys import os from PyQt5.QtWidgets import ( QApplication, QWidget, QPushButton, QTextEdit, QCheckBox, QVBoxLayout, QHBoxLayout, QFileDialog ) from PyQt5.QtGui import QFont from PyQt5.QtCore import Qt class SimpleNotepad(QWidget): def __init__(self): super().__init__() # 初始化窗口基础属性 self.init_window() # 初始化控件与布局结构 self.init_widgets_layout() # 绑定信号与槽函数 self.init_signals_slots() # 记录当前打开的文件路径,初始为None表示新文件 self.current_file_path = None def init_window(self): """初始化窗口的标题、大小和位置""" self.setWindowTitle("简易文本编辑器(仿照记事本)") # 设置窗口初始尺寸 self.resize(800, 600) # 计算并设置窗口居中显示 screen_geometry = QApplication.desktop().availableGeometry() x = (screen_geometry.width() - self.width()) // 2 y = (screen_geometry.height() - self.height()) // 2 self.move(x, y) def init_widgets_layout(self): """创建所有界面控件并设置布局""" # 创建主垂直布局,设置控件间距和窗口内边距 self.main_layout = QVBoxLayout() self.main_layout.setSpacing(10) self.main_layout.setContentsMargins(15, 15, 15, 15) # 创建按钮区水平布局 self.button_layout = QHBoxLayout() self.button_layout.setSpacing(10) # 创建功能按钮并设置固定尺寸 self.new_btn = QPushButton("新建") self.open_btn = QPushButton("打开") self.save_btn = QPushButton("保存") btn_size = (80, 30) self.new_btn.setFixedSize(*btn_size) self.open_btn.setFixedSize(*btn_size) self.save_btn.setFixedSize(*btn_size) # 创建字体加粗复选框,设置文本居中显示 self.bold_check = QCheckBox("字体加粗") self.bold_check.setStyleSheet("text-align: center;") # 将按钮添加到水平布局 self.button_layout.addWidget(self.new_btn) self.button_layout.addWidget(self.open_btn) self.button_layout.addWidget(self.save_btn) # 添加伸缩项,将复选框推至布局右侧 self.button_layout.addStretch() self.button_layout.addWidget(self.bold_check) # 创建文本编辑区域,设置默认字体和占位提示文本 self.text_edit = QTextEdit() self.text_edit.setFont(QFont("微软雅黑", 12)) self.text_edit.setPlaceholderText("请输入文本内容...(支持新建、打开、保存文件)") # 将按钮布局和文本编辑区添加到主布局 self.main_layout.addLayout(self.button_layout) self.main_layout.addWidget(self.text_edit) # 设置窗口的主布局 self.setLayout(self.main_layout) def init_signals_slots(self): """绑定控件的信号与对应的槽函数""" self.new_btn.clicked.connect(self.on_new_click) self.open_btn.clicked.connect(self.on_open_click) self.save_btn.clicked.connect(self.on_save_click) self.bold_check.stateChanged.connect(self.on_bold_check_change) def on_new_click(self): """新建文件:清空编辑区,重置文件路径""" # 若有未保存内容,先提示保存 if self.text_edit.toPlainText() and not self.current_file_path: reply = QFileDialog.getSaveFileName(self, "保存当前内容", "", "Text Files (*.txt)") if reply[0]: self.save_text_to_file(reply[0]) # 清空编辑区内容 self.text_edit.clear() # 重置当前文件路径 self.current_file_path = None # 更新窗口标题 self.setWindowTitle("简易文本编辑器(仿照记事本)- 未保存文件") def on_open_click(self): """打开文件:选择txt文件并读取内容到编辑区""" # 弹出文件选择对话框,筛选文本文件 file_path, _ = QFileDialog.getOpenFileName( self, "打开文本文件", "", "Text Files (*.txt);;All Files (*.*)" ) # 验证文件路径有效性并读取内容 if file_path and os.path.exists(file_path): with open(file_path, "r", encoding="utf-8") as f: content = f.read() self.text_edit.setText(content) self.current_file_path = file_path # 更新窗口标题显示当前文件名 self.setWindowTitle(f"简易文本编辑器(仿照记事本)- {os.path.basename(file_path)}") def on_save_click(self): """保存文件:已有路径则直接保存,无路径则弹出保存对话框""" if self.current_file_path: # 直接保存到当前路径 self.save_text_to_file(self.current_file_path) else: # 弹出保存对话框选择路径 file_path, _ = QFileDialog.getSaveFileName( self, "保存文本文件", "", "Text Files (*.txt)" ) if file_path: # 自动补充txt后缀 if not file_path.endswith(".txt"): file_path += ".txt" self.save_text_to_file(file_path) self.current_file_path = file_path self.setWindowTitle(f"简易文本编辑器(仿照记事本)- {os.path.basename(file_path)}") def save_text_to_file(self, file_path): """将编辑区内容写入指定路径的文件""" content = self.text_edit.toPlainText() with open(file_path, "w", encoding="utf-8") as f: f.write(content) def on_bold_check_change(self, state): """根据复选框状态切换编辑区文本的加粗样式""" current_font = self.text_edit.font() # Qt.Checked对应值为2,Qt.Unchecked对应值为0 current_font.setBold(state == Qt.Checked) self.text_edit.setFont(current_font) if __name__ == "__main__": # 创建应用程序实例 app = QApplication(sys.argv) # 创建记事本窗口实例 notepad = SimpleNotepad() # 显示窗口 notepad.show() # 启动应用程序主循环 sys.exit(app.exec_())五、代码逐行解析(核心部分) 1. 类结构与初始化流程 我们将所有功能封装到SimpleNotepad类(继承QWidget),初始化流程分3步: init_window():设置窗口标题、大小、居中显示,提升用户体验; init_widgets_layout():核心布局搭建,用“垂直布局+水平布局”组合实现记事本风格,按钮区在上、编辑区在下,保证窗口缩放时编辑区自适应; init_signals_slots():绑定所有控件的信号与槽,实现“点击按钮触发功能”“复选框变化触发字体调整”。 2. 布局核心逻辑 采用“嵌套布局”思路,解决控件排列问题: 主布局(QVBoxLayout):垂直方向排列“按钮布局”和“文本编辑区”,addStretch()未使用,让编辑区占满剩余空间; 按钮布局(QHBoxLayout):水平方向排列3个功能按钮,添加addStretch()伸缩空间将“字体加粗”复选框推到右侧,让布局更美观。 3. 核心功能实现 (1)新建文件(on_new_click) 逻辑:先判断当前是否有未保存的内容,如果有则弹出保存对话框;清空编辑区,重置current_file_path(标记为新文件),更新窗口标题。 (2)打开文件(on_open_click) 逻辑:用QFileDialog.getOpenFileName()弹出文件选择框,筛选txt文件;读取选中文件的内容并显示到QTextEdit,更新current_file_path和窗口标题(显示文件名)。 (3)保存文件(on_save_click) 逻辑:如果已打开文件(current_file_path不为None),直接保存;否则弹出保存对话框,让用户选择路径,补充.txt后缀,保存内容后更新路径和标题。 (4)字体加粗(on_bold_check_change) 逻辑:监听复选框状态变化,用QFont.setBold()切换字体加粗状态,直接作用于QTextEdit的当前字体。 六、运行效果与测试步骤 1. 运行方式 将代码保存为simple_notepad.py,确保已安装PyQt5,终端运行命令: python simple_notepad.py # Windows python3 simple_notepad.py # macOS/Linux2. 测试步骤 测试新建:点击“新建”,编辑区清空,标题显示“未保存文件”; 测试打开:点击“打开”,选择本地txt文件,内容正常显示,标题显示文件名; 测试保存:编辑内容后点击“保存”,如果是新文件则弹出保存对话框,保存后可在对应路径找到txt文件; 测试字体加粗:勾选“字体加粗”,编辑区文本变为加粗;取消勾选则恢复正常。 七、常见问题排查 问题1:打开文件后中文乱码 → 解决:读取文件时指定encoding="utf-8",保存时也用utf-8编码; 问题2:窗口缩放时编辑区不自适应 → 解决:确保主布局是QVBoxLayout,且QTextEdit直接添加到主布局(未设置固定大小); 问题3:保存文件后没有.txt后缀 → 解决:代码中已添加判断,自动补充.txt后缀,无需手动输入; 问题4:按钮点击无反应 → 解决:检查信号与槽绑定是否正确(如self.new_btn.clicked.connect(self.on_new_click)是否写错函数名)。 八、功能拓展思路(阶段一知识点范围内) 如果想进一步练习,可以基于当前代码拓展以下功能: 添加“撤销/重做”按钮:利用QTextEdit.undo()和QTextEdit.redo()实现; 添加“清空”按钮:绑定self.text_edit.clear(); 添加“字体大小调整”:用QComboBox下拉选择字体大小,绑定信号修改QFont的setPointSize(); 添加“换行/不换行”复选框:用QTextEdit.setLineWrapMode()控制换行模式。 总结 本次项目完美整合了阶段一的核心知识点:窗口设置、线性布局、基础控件使用、信号与槽绑定。通过仿照记事本界面开发,你应该能深刻理解“布局管理器解决控件排列”“信号与槽实现交互”的核心逻辑。 下一篇我们将进入阶段二,学习网格布局、表单布局等进阶布局管理器,为更复杂的界面开发打基础。如果在项目实操中遇到问题,或者有拓展功能的想法,欢迎在评论区留言讨论~ -
PyQt5常用控件(二):复选框单选框下拉框 PyQt5常用基础控件(二):复选框、单选框与下拉框 哈喽~ 欢迎来到PyQt5从入门到精通的第四篇!上一篇我们掌握了标签、按钮、输入框这三个核心基础控件,这一篇聚焦进阶基础控件——QCheckBox复选框、QRadioButton单选框、QComboBox下拉框,这三类控件是“选择类交互”的核心(比如选择性别、爱好、职业),全程代码完整可直接运行,还会做一个“个人信息选择”综合案例,新手也能轻松掌握! mjqzsti2.png图片 一、核心控件详解:每个控件的用法+完整代码 这三类控件的核心作用是让用户做选择,但适用场景不同:单选框(二选一/多选一)、复选框(多选多)、下拉框(大量选项的精简选择),我们逐个拆解。 1. QCheckBox:复选框(多选多) QCheckBox用于允许多选的场景(比如选择爱好:读书、运动、听歌),支持“选中/未选中”状态,还能监听状态变化。 完整代码:QCheckBox常用用法 mjqzttv2.png图片 import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QCheckBox, QVBoxLayout, QLabel, QPushButton ) from PyQt5.QtCore import Qt class CheckBoxDemo(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("QCheckBox复选框演示") self.resize(350, 250) layout = QVBoxLayout() layout.setSpacing(15) layout.setContentsMargins(50, 40, 50, 40) # 提示标签 self.tip_label = QLabel("请选择你的爱好(可多选):") layout.addWidget(self.tip_label) # 1. 创建复选框 self.check1 = QCheckBox("读书") self.check2 = QCheckBox("运动") self.check3 = QCheckBox("听歌") self.check4 = QCheckBox("编程") # 可选:设置默认选中状态 self.check4.setChecked(True) # 绑定状态变化信号(选中/取消选中时触发) self.check1.stateChanged.connect(self.on_check_change) self.check2.stateChanged.connect(self.on_check_change) self.check3.stateChanged.connect(self.on_check_change) self.check4.stateChanged.connect(self.on_check_change) # 添加到布局 layout.addWidget(self.check1) layout.addWidget(self.check2) layout.addWidget(self.check3) layout.addWidget(self.check4) # 按钮:获取选中的爱好 get_btn = QPushButton("获取选中的爱好") get_btn.clicked.connect(self.get_checked_hobbies) layout.addWidget(get_btn) # 结果显示标签 self.result_label = QLabel("已选中:编程") layout.addWidget(self.result_label) self.setLayout(layout) # 复选框状态变化槽函数 def on_check_change(self, state): # state:2=选中,0=未选中 sender = self.sender() # 获取触发信号的复选框 if state == Qt.Checked: print(f"选中了:{sender.text()}") else: print(f"取消选中:{sender.text()}") # 获取所有选中的爱好 def get_checked_hobbies(self): hobbies = [] if self.check1.isChecked(): hobbies.append(self.check1.text()) if self.check2.isChecked(): hobbies.append(self.check2.text()) if self.check3.isChecked(): hobbies.append(self.check3.text()) if self.check4.isChecked(): hobbies.append(self.check4.text()) if hobbies: self.result_label.setText(f"已选中:{', '.join(hobbies)}") else: self.result_label.setText("未选中任何爱好") if __name__ == "__main__": app = QApplication(sys.argv) window = CheckBoxDemo() window.show() sys.exit(app.exec_())QCheckBox关键方法解析 方法作用setChecked(True)设置默认选中状态(False为未选中)isChecked()判断是否选中(返回True/False)stateChanged.connect(槽函数)监听状态变化(选中/取消选中)text()获取复选框的文本内容sender()在槽函数中获取触发信号的控件(区分多个复选框)2. QRadioButton:单选框(多选一) QRadioButton用于只能选一个的场景(比如性别:男/女),核心是必须分组(QButtonGroup),否则多个单选框不会互斥(能同时选中)。 完整代码:QRadioButton常用用法 mjqzusvk.png图片 import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QRadioButton, QVBoxLayout, QLabel, QPushButton, QButtonGroup ) class RadioButtonDemo(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("QRadioButton单选框演示") self.resize(350, 200) layout = QVBoxLayout() layout.setSpacing(15) layout.setContentsMargins(50, 40, 50, 40) # 提示标签 self.tip_label = QLabel("请选择你的性别(只能选一个):") layout.addWidget(self.tip_label) # 1. 创建单选框分组(核心!否则单选框不互斥) self.radio_group = QButtonGroup(self) # 2. 创建单选框 self.radio1 = QRadioButton("男") self.radio2 = QRadioButton("女") self.radio3 = QRadioButton("保密") # 3. 将单选框加入分组 self.radio_group.addButton(self.radio1, 1) # 第二个参数是自定义ID,可选 self.radio_group.addButton(self.radio2, 2) self.radio_group.addButton(self.radio3, 3) # 可选:设置默认选中 self.radio3.setChecked(True) # 绑定选中变化信号 self.radio_group.buttonClicked.connect(self.on_radio_click) # 添加到布局 layout.addWidget(self.radio1) layout.addWidget(self.radio2) layout.addWidget(self.radio3) # 按钮:获取选中的性别 get_btn = QPushButton("获取选中的性别") get_btn.clicked.connect(self.get_checked_gender) layout.addWidget(get_btn) # 结果显示标签 self.result_label = QLabel("已选中:保密") layout.addWidget(self.result_label) self.setLayout(layout) # 单选框点击槽函数 def on_radio_click(self, radio_btn): # radio_btn是被点击的单选框对象 print(f"选中了性别:{radio_btn.text()}") # 获取选中的性别 def get_checked_gender(self): # 方式1:通过分组获取选中的按钮 checked_btn = self.radio_group.checkedButton() if checked_btn: self.result_label.setText(f"已选中:{checked_btn.text()}") else: self.result_label.setText("未选中任何性别") # 方式2:逐个判断(不推荐,分组更高效) # if self.radio1.isChecked(): # self.result_label.setText("已选中:男") # elif self.radio2.isChecked(): # self.result_label.setText("已选中:女") # elif self.radio3.isChecked(): # self.result_label.setText("已选中:保密") if __name__ == "__main__": app = QApplication(sys.argv) window = RadioButtonDemo() window.show() sys.exit(app.exec_())QRadioButton关键要点 必须分组:用QButtonGroup管理单选框,否则多个单选框可同时选中; 核心方法: 方法作用QButtonGroup.addButton(单选框, ID)将单选框加入分组radio_group.checkedButton()获取分组中选中的单选框setChecked(True)设置默认选中isChecked()判断是否选中 3. QComboBox:下拉选择框(精简多选一) QComboBox用于选项较多、需要精简界面的场景(比如选择职业、城市),支持下拉展开选择,也能设置可编辑(允许用户输入)。 完整代码:QComboBox常用用法 mjqzvsjb.png图片 import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QComboBox, QVBoxLayout, QLabel, QPushButton ) class ComboBoxDemo(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("QComboBox下拉框演示") self.resize(350, 200) layout = QVBoxLayout() layout.setSpacing(15) layout.setContentsMargins(50, 40, 50, 40) # 提示标签 self.tip_label = QLabel("请选择你的职业:") layout.addWidget(self.tip_label) # 1. 创建下拉框 self.combo = QComboBox() # 2. 添加选项(三种方式) # 方式1:逐个添加 self.combo.addItem("学生") self.combo.addItem("程序员") self.combo.addItem("教师") # 方式2:批量添加 self.combo.addItems(["设计师", "医生", "自由职业者"]) # 方式3:添加带自定义数据的选项(文本+值) self.combo.addItem("其他", "other") # 可选设置 self.combo.setCurrentIndex(1) # 设置默认选中第2个选项(索引从0开始) # self.combo.setEditable(True) # 允许用户输入自定义内容 # 绑定选中变化信号 self.combo.currentIndexChanged.connect(self.on_combo_change) # 索引变化 # self.combo.currentTextChanged.connect(self.on_text_change) # 文本变化 layout.addWidget(self.combo) # 按钮:获取选中的职业 get_btn = QPushButton("获取选中的职业") get_btn.clicked.connect(self.get_checked_job) layout.addWidget(get_btn) # 结果显示标签 self.result_label = QLabel("已选中:程序员") layout.addWidget(self.result_label) self.setLayout(layout) # 下拉框索引变化槽函数 def on_combo_change(self, index): # index是选中项的索引 text = self.combo.itemText(index) # 通过索引获取文本 data = self.combo.itemData(index) # 获取自定义数据(没有则返回None) print(f"选中索引:{index},职业:{text},自定义数据:{data}") # # 文本变化槽函数(当setEditable=True时常用) # def on_text_change(self, text): # print(f"选中/输入的职业:{text}") # 获取选中的职业 def get_checked_job(self): # 方式1:获取选中的文本 text = self.combo.currentText() # 方式2:获取选中的索引 index = self.combo.currentIndex() # 方式3:获取自定义数据 data = self.combo.currentData() self.result_label.setText(f"职业:{text}(索引:{index},自定义数据:{data})") if __name__ == "__main__": app = QApplication(sys.argv) window = ComboBoxDemo() window.show() sys.exit(app.exec_())QComboBox关键方法 方法作用addItem("文本", 自定义数据)添加单个选项addItems(["选项1", "选项2"])批量添加选项setCurrentIndex(索引)设置默认选中项(索引从0开始)currentText()获取选中的文本currentIndex()获取选中的索引setEditable(True)允许用户输入自定义内容二、综合案例:个人信息选择窗口(完整代码) 结合复选框、单选框、下拉框,做一个实用的“个人信息填写窗口”——包含性别单选、爱好复选、职业下拉,点击“提交”按钮后显示所有选中的信息,界面美化且逻辑完整。 mjqzxjc5.png图片 import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QLabel, QRadioButton, QCheckBox, QComboBox, QPushButton, QVBoxLayout, QHBoxLayout, QGroupBox, QButtonGroup ) from PyQt5.QtGui import QFont from PyQt5.QtCore import Qt class InfoWindow(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): # 窗口基础设置 self.setWindowTitle("个人信息选择窗口") self.resize(450, 400) self.setStyleSheet(""" QWidget { font-size: 14px; color: #2c3e50; } QGroupBox { font-weight: bold; border: 1px solid #bdc3c7; border-radius: 6px; margin-top: 10px; padding-top: 10px; } QPushButton { background-color: #27ae60; color: white; padding: 8px 16px; border: none; border-radius: 4px; } QPushButton:hover { background-color: #219653; } """) # 主布局(垂直) main_layout = QVBoxLayout() main_layout.setSpacing(20) main_layout.setContentsMargins(40, 30, 40, 30) # 1. 性别分组(QGroupBox美化分组) gender_group = QGroupBox("性别") gender_layout = QHBoxLayout() # 单选框分组 self.gender_btn_group = QButtonGroup() self.radio_male = QRadioButton("男") self.radio_female = QRadioButton("女") self.radio_secret = QRadioButton("保密") self.gender_btn_group.addButton(self.radio_male) self.gender_btn_group.addButton(self.radio_female) self.gender_btn_group.addButton(self.radio_secret) # 默认选中保密 self.radio_secret.setChecked(True) # 添加到性别布局 gender_layout.addWidget(self.radio_male) gender_layout.addWidget(self.radio_female) gender_layout.addWidget(self.radio_secret) gender_group.setLayout(gender_layout) main_layout.addWidget(gender_group) # 2. 爱好分组 hobby_group = QGroupBox("爱好(可多选)") hobby_layout = QHBoxLayout() # 复选框 self.check_read = QCheckBox("读书") self.check_sport = QCheckBox("运动") self.check_music = QCheckBox("听歌") self.check_code = QCheckBox("编程") # 添加到爱好布局 hobby_layout.addWidget(self.check_read) hobby_layout.addWidget(self.check_sport) hobby_layout.addWidget(self.check_music) hobby_layout.addWidget(self.check_code) hobby_group.setLayout(hobby_layout) main_layout.addWidget(hobby_group) # 3. 职业分组 job_group = QGroupBox("职业") job_layout = QHBoxLayout() # 下拉框 self.combo_job = QComboBox() self.combo_job.addItems(["学生", "程序员", "教师", "设计师", "医生", "其他"]) job_layout.addWidget(QLabel("选择:")) job_layout.addWidget(self.combo_job) job_group.setLayout(job_layout) main_layout.addWidget(job_group) # 4. 提交按钮 submit_btn = QPushButton("提交信息") submit_btn.clicked.connect(self.submit_info) main_layout.addWidget(submit_btn, alignment=Qt.AlignCenter) # 5. 结果显示标签 self.result_label = QLabel("") self.result_label.setStyleSheet("color: #e67e22; margin-top: 10px;") self.result_label.setAlignment(Qt.AlignCenter) main_layout.addWidget(self.result_label) # 绑定主布局 self.setLayout(main_layout) # 提交信息槽函数 def submit_info(self): # 1. 获取性别 gender = self.gender_btn_group.checkedButton().text() # 2. 获取爱好 hobbies = [] if self.check_read.isChecked(): hobbies.append(self.check_read.text()) if self.check_sport.isChecked(): hobbies.append(self.check_sport.text()) if self.check_music.isChecked(): hobbies.append(self.check_music.text()) if self.check_code.isChecked(): hobbies.append(self.check_code.text()) hobby_text = ", ".join(hobbies) if hobbies else "无" # 3. 获取职业 job = self.combo_job.currentText() # 4. 显示结果 result = f""" 提交的信息: 性别:{gender} 爱好:{hobby_text} 职业:{job} """ self.result_label.setText(result) if __name__ == "__main__": app = QApplication(sys.argv) window = InfoWindow() window.show() sys.exit(app.exec_())综合案例亮点 用QGroupBox对控件分组,界面更规整、易读; 结合了三类选择控件,覆盖“单选、多选、下拉选”所有常用选择场景; 加入样式美化(按钮悬停、分组边框、字体颜色); 逻辑完整:提交后整合所有选中信息并显示,新手可直接复用。 三、常见问题排查 单选框不互斥: 未使用QButtonGroup分组,只需将所有单选框加入同一个分组即可; 分组时误将单选框加入不同分组(比如创建了多个QButtonGroup)。 复选框无法获取选中状态: 槽函数中未正确调用isChecked(),或控件实例名写错(比如check1写成check_1); 复选框被禁用(setDisabled(True)),导致无法选中。 下拉框选项不显示: 忘记调用addItem()/addItems()添加选项; 下拉框尺寸太小(可通过setMinimumWidth(100)设置最小宽度)。 提交后结果不显示: 槽函数未绑定到按钮的clicked信号; 结果标签被布局遮挡(可调整setContentsMargins或spacing)。 总结 三类选择控件的核心场景:QRadioButton(单选)、QCheckBox(多选)、QComboBox(精简单选); 单选框必须用QButtonGroup分组,否则无法实现互斥; 复选框通过isChecked()判断状态,下拉框通过currentText()获取选中内容; 实际开发中用QGroupBox分组控件,可提升界面可读性; 下一篇我们会讲解阶段一实战项目:仿照记事本界面开发简易文本编辑器,记得关注字节曜博客哦~ 如果在实操中遇到问题,欢迎在评论区留言讨论! -
PyQt5常用控件(一):标签按钮输入框+信号与槽入门(完整代码) PyQt5常用基础控件(一):标签、按钮与输入框+信号与槽入门(附完整代码) 哈喽~ 欢迎来到PyQt5从入门到精通的第三篇!上一篇我们搞定了QWidget窗口属性和线性布局,这一篇聚焦最常用的3个基础控件(QLabel标签、QPushButton按钮、QLineEdit输入框),再加上PyQt5交互的核心——信号与槽(Signal & Slot) 基础,手把手教你实现控件之间的互动,全程代码完整可直接运行,新手也能轻松拿捏! mjqzambw.png图片 一、核心控件详解:每个控件的用法+完整代码 这三个控件是PyQt5开发中最基础也最常用的,几乎所有桌面应用都会用到(比如登录窗口的用户名输入框、确认按钮、提示标签)。我们逐个拆解,先讲用法,再上代码,最后看效果。 1. QLabel:标签控件(显示文本/图片) QLabel的核心作用是显示内容,支持文本、图片、超链接等,是界面中的“信息展示员”。 完整代码:QLabel常用用法 import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout from PyQt5.QtGui import QPixmap, QFont from PyQt5.QtCore import Qt class LabelDemo(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("QLabel标签控件演示") self.resize(400, 350) # 创建布局(垂直布局,让控件从上到下排列) layout = QVBoxLayout() # 1. 显示普通文本 label1 = QLabel("这是普通文本标签") # 设置文本居中对齐 label1.setAlignment(Qt.AlignCenter) layout.addWidget(label1) # 2. 显示带样式的文本(字体大小、颜色) label2 = QLabel("这是带样式的文本") # 用StyleSheet设置样式(类似CSS) label2.setStyleSheet("font-size: 16px; color: #e74c3c; font-weight: bold;") label2.setAlignment(Qt.AlignCenter) layout.addWidget(label2) # 3. 显示图片(替换为你的图片路径,支持png/jpg等格式) label3 = QLabel() # 加载图片并缩放(保持比例) pixmap = QPixmap("test.png") # 图片放在代码同目录,直接写文件名 label3.setPixmap(pixmap.scaled(200, 200, Qt.KeepAspectRatio)) label3.setAlignment(Qt.AlignCenter) # 图片居中 layout.addWidget(label3) # 4. 显示超链接(可点击跳转) label4 = QLabel('<a href="https://www.ziyeyao.com">点击访问字节曜博客</a>') label4.setAlignment(Qt.AlignCenter) label4.setOpenExternalLinks(True) # 允许打开外部链接 layout.addWidget(label4) # 绑定布局到窗口 self.setLayout(layout) if __name__ == "__main__": app = QApplication(sys.argv) window = LabelDemo() window.show() sys.exit(app.exec_())mjqxgqbv.png图片 QLabel关键方法解析 方法作用setAlignment(Qt.AlignCenter)设置内容对齐(居中/左对齐/右对齐)setStyleSheet("样式")自定义样式(字体、颜色、背景等)setPixmap(QPixmap("图片路径"))显示图片,scaled() 用于缩放图片setOpenExternalLinks(True)启用超链接点击跳转2. QPushButton:按钮控件(触发交互) QPushButton是交互核心控件,用户点击按钮后会触发特定操作(比如登录、保存、关闭窗口),必须结合“信号与槽”使用才能实现交互。 完整代码:QPushButton常用用法+信号与槽基础 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel from PyQt5.QtCore import Qt class ButtonDemo(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("QPushButton按钮控件演示") self.resize(300, 200) layout = QVBoxLayout() # 创建标签(用于显示按钮点击状态) self.status_label = QLabel("未点击按钮", alignment=Qt.AlignCenter) layout.addWidget(self.status_label) # 1. 普通按钮 btn1 = QPushButton("普通按钮") # 绑定信号与槽:按钮点击(信号)→ 执行on_btn1_click函数(槽) btn1.clicked.connect(self.on_btn1_click) layout.addWidget(btn1) # 2. 带图标+文本的按钮(图标路径替换为你的文件) btn2 = QPushButton("带图标按钮") btn2.setIcon(QPixmap("icon.png").scaled(20, 20, Qt.KeepAspectRatio)) btn2.clicked.connect(self.on_btn2_click) layout.addWidget(btn2) # 3. 禁用状态的按钮(无法点击) btn3 = QPushButton("禁用按钮") btn3.setDisabled(True) # 禁用按钮 layout.addWidget(btn3) self.setLayout(layout) # 槽函数:btn1点击后执行 def on_btn1_click(self): self.status_label.setText("点击了普通按钮!") self.status_label.setStyleSheet("color: #2ecc71;") # 槽函数:btn2点击后执行 def on_btn2_click(self): self.status_label.setText("点击了带图标按钮!") self.status_label.setStyleSheet("color: #3498db;") if __name__ == "__main__": app = QApplication(sys.argv) window = ButtonDemo() window.show() sys.exit(app.exec_())mjqz3lir.png图片 关键解析:信号与槽(核心!) 信号(Signal):控件的某个动作(比如按钮点击clicked、输入框内容变化textChanged); 槽(Slot):信号触发后执行的函数(比如on_btn1_click); 绑定方式:控件.信号.connect(槽函数),这是PyQt5交互的核心逻辑,记住这个公式! QPushButton关键方法 方法作用clicked.connect(槽函数)绑定点击信号与槽函数setIcon(QPixmap("图标路径"))设置按钮图标setDisabled(True)禁用按钮(False为启用)setText("按钮文本")动态修改按钮文本3. QLineEdit:单行输入框(获取用户输入) QLineEdit用于获取用户单行输入(比如用户名、密码、验证码),支持限制输入长度、密码隐藏、提示文本等功能。 完整代码:QLineEdit常用用法 import sys from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayout, QLabel, QPushButton class LineEditDemo(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("QLineEdit输入框演示") self.resize(350, 250) layout = QVBoxLayout() layout.setSpacing(20) layout.setContentsMargins(50, 50, 50, 50) # 1. 普通输入框(带提示文本) self.edit1 = QLineEdit() self.edit1.setPlaceholderText("请输入用户名(最多10个字符)") self.edit1.setMaxLength(10) # 限制输入长度 layout.addWidget(self.edit1) # 2. 密码输入框(输入内容隐藏) self.edit2 = QLineEdit() self.edit2.setPlaceholderText("请输入密码") self.edit2.setEchoMode(QLineEdit.Password) # 密码隐藏模式 layout.addWidget(self.edit2) # 3. 只读输入框(无法编辑) edit3 = QLineEdit("只读文本,无法修改") edit3.setReadOnly(True) layout.addWidget(edit3) # 按钮:获取输入框内容 btn = QPushButton("获取输入内容") btn.clicked.connect(self.get_input_value) layout.addWidget(btn) # 标签:显示获取到的内容 self.result_label = QLabel("") layout.addWidget(self.result_label) self.setLayout(layout) # 槽函数:获取输入框内容并显示 def get_input_value(self): username = self.edit1.text() # 获取输入框1的内容 password = self.edit2.text() # 获取输入框2的内容 self.result_label.setText(f"用户名:{username},密码:{password}") # 清空输入框(可选) self.edit1.clear() self.edit2.clear() if __name__ == "__main__": app = QApplication(sys.argv) window = LineEditDemo() window.show() sys.exit(app.exec_())mjqz66bs.png图片 QLineEdit关键方法 方法作用setPlaceholderText("提示文本")设置输入提示(未输入时显示)setMaxLength(数字)限制最大输入长度setEchoMode(QLineEdit.Password)密码模式(输入内容显示为圆点)setReadOnly(True)设置为只读(无法编辑)text()获取输入框中的内容clear()清空输入框内容二、综合案例:用户名密码输入验证窗口(完整代码) 结合上面三个控件和信号与槽,做一个实用的“登录验证窗口”——输入用户名和密码后,点击按钮验证是否正确(模拟登录逻辑)。 import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout ) from PyQt5.QtGui import QFont, QPixmap from PyQt5.QtCore import Qt class LoginWindow(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): # 窗口基础设置 self.setWindowTitle("模拟登录窗口") self.resize(400, 300) self.setStyleSheet("background-color: #f8f9fa;") # 主布局(垂直布局) main_layout = QVBoxLayout() main_layout.setSpacing(25) main_layout.setContentsMargins(60, 50, 60, 50) # 1. 标题区域(图标+文本) title_layout = QHBoxLayout() # 标题图标 title_icon = QLabel() title_icon.setPixmap(QPixmap("login_icon.png").scaled(30, 30, Qt.KeepAspectRatio)) # 标题文本 title_label = QLabel("用户登录") title_label.setStyleSheet("font-size: 20px; font-weight: bold; color: #2c3e50;") # 添加到标题布局 title_layout.addWidget(title_icon) title_layout.addWidget(title_label) title_layout.setAlignment(Qt.AlignCenter) main_layout.addLayout(title_layout) # 2. 用户名输入区域 user_layout = QHBoxLayout() user_label = QLabel("用户名:") user_label.setStyleSheet("font-size: 14px; color: #34495e;") self.user_edit = QLineEdit() self.user_edit.setPlaceholderText("请输入用户名") self.user_edit.setStyleSheet("padding: 6px; border: 1px solid #bdc3c7; border-radius: 4px;") user_layout.addWidget(user_label) user_layout.addWidget(self.user_edit) main_layout.addLayout(user_layout) # 3. 密码输入区域 pwd_layout = QHBoxLayout() pwd_label = QLabel("密 码:") pwd_label.setStyleSheet("font-size: 14px; color: #34495e;") self.pwd_edit = QLineEdit() self.pwd_edit.setPlaceholderText("请输入密码") self.pwd_edit.setEchoMode(QLineEdit.Password) self.pwd_edit.setStyleSheet("padding: 6px; border: 1px solid #bdc3c7; border-radius: 4px;") pwd_layout.addWidget(pwd_label) pwd_layout.addWidget(self.pwd_edit) main_layout.addLayout(pwd_layout) # 4. 验证结果标签 self.result_label = QLabel("") self.result_label.setAlignment(Qt.AlignCenter) main_layout.addWidget(self.result_label) # 5. 登录按钮 login_btn = QPushButton("登录") login_btn.setStyleSheet(""" background-color: #3498db; color: white; padding: 8px; border: none; border-radius: 4px; font-size: 14px; """) # 鼠标悬停时改变颜色 login_btn.setStyleSheet(""" QPushButton { background-color: #3498db; color: white; padding: 8px; border: none; border-radius: 4px; font-size: 14px; } QPushButton:hover { background-color: #2980b9; } """) login_btn.clicked.connect(self.check_login) main_layout.addWidget(login_btn) # 绑定主布局 self.setLayout(main_layout) # 登录验证槽函数 def check_login(self): # 模拟正确的用户名和密码 correct_user = "admin" correct_pwd = "123456" # 获取用户输入 input_user = self.user_edit.text().strip() # strip()去除前后空格 input_pwd = self.pwd_edit.text().strip() # 验证逻辑 if not input_user or not input_pwd: self.result_label.setText("用户名或密码不能为空!") self.result_label.setStyleSheet("color: #e74c3c; font-size: 12px;") elif input_user == correct_user and input_pwd == correct_pwd: self.result_label.setText("登录成功!") self.result_label.setStyleSheet("color: #2ecc71; font-size: 12px;") else: self.result_label.setText("用户名或密码错误!") self.result_label.setStyleSheet("color: #e74c3c; font-size: 12px;") # 清空密码输入框 self.pwd_edit.clear() if __name__ == "__main__": app = QApplication(sys.argv) window = LoginWindow() window.show() sys.exit(app.exec_())mjqz6yqo.png图片 综合案例亮点 结合了QLabel(标题、提示)、QLineEdit(输入)、QPushButton(登录)三个核心控件; 使用嵌套布局(QVBoxLayout+QHBoxLayout),界面更规整; 加入了样式美化(背景色、边框、按钮悬停效果); 实现了完整的登录验证逻辑(非空判断、正确/错误提示)。 三、常见问题排查 按钮点击后没反应: 忘记绑定clicked.connect(槽函数); 槽函数名称写错(比如on_btn_click写成on_btn_click1); 按钮被设置为禁用状态(setDisabled(True))。 输入框无法获取内容: 没有用text()方法获取内容,或获取的是其他输入框的实例; 输入内容有前后空格,可加strip()方法去除(如self.user_edit.text().strip())。 图片/图标不显示: 图片路径错误(建议放在代码同目录,直接写文件名); 图片尺寸太大,未用scaled()缩放导致超出窗口范围。 样式设置不生效: StyleSheet语法错误(比如少写分号、引号不匹配); 控件样式被布局或父控件样式覆盖,可针对性调整。 总结 三个核心控件的核心用途:QLabel显示、QPushButton触发、QLineEdit输入; 信号与槽是PyQt5交互的核心,记住控件.信号.connect(槽函数)的绑定方式; 实际开发中建议用布局管理器组织控件,配合StyleSheet美化界面; 下一篇我们会讲解复选框、单选框、下拉框等进阶基础控件,以及更复杂的信号与槽用法,记得关注字节曜博客哦~ 如果在实操中遇到问题,欢迎在评论区留言讨论! -
PyQt5核心基础:QWidget窗口属性与线性布局入门 PyQt5核心基础:QWidget基础窗口与布局入门(附完整可运行代码) 哈喽~欢迎来到PyQt5从入门到精通的第二篇!上一篇我们搞定了环境搭建和第一个空白窗口,这一篇我们聚焦QWidget基础窗口的进阶属性和布局管理器入门——解决新手最头疼的“控件位置混乱、窗口缩放后控件错位”问题,全程代码完整可直接运行,新手也能轻松跟上! mjqx9i5t.png图片 一、先回顾:QWidget是什么? QWidget是PyQt5中所有可视化控件的基类(可以理解为“所有窗口/控件的老祖宗”),我们上一篇创建的空白窗口就是QWidget的实例。它不仅能作为独立窗口使用,还能作为其他控件的容器,掌握它的属性设置是PyQt5界面开发的核心基础。 二、QWidget窗口进阶属性设置(完整代码) 上一篇我们只设置了窗口标题、大小、位置,这一节我们拓展更多实用属性:设置窗口图标、固定窗口大小、窗口置顶、自定义背景色、监听关闭事件等,先上完整代码,再逐行解析。 完整代码:QWidget窗口进阶属性 import sys # 导入必要控件:QWidget(窗口)、QApplication(应用)、QIcon(图标) from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QIcon from PyQt5.QtCore import Qt class MyWindow(QWidget): def __init__(self): # 继承QWidget的初始化方法 super().__init__() # 调用自定义的窗口设置方法 self.init_ui() def init_ui(self): # 1. 基础属性(复习) self.setWindowTitle("QWidget进阶窗口") # 窗口标题 self.resize(400, 300) # 初始大小(宽×高) self.move(300, 200) # 初始位置(屏幕坐标:左×上) # 2. 进阶属性:设置窗口图标 # 注意:替换为你本地的图标路径(支持.ico/png/jpg格式) # 新手提示:可先找一张小图片(比如16×16/32×32像素),放在代码同目录下 self.setWindowIcon(QIcon("icon.png")) # 3. 进阶属性:固定窗口大小(禁止用户缩放) # 取消注释以下行,窗口将固定为400×300,无法拖动边缘缩放 # self.setFixedSize(400, 300) # 4. 进阶属性:窗口置顶(始终显示在其他窗口上方) self.setWindowFlags(Qt.WindowStaysOnTopHint) # 5. 进阶属性:设置窗口背景色(浅灰色) self.setStyleSheet("background-color: #f0f0f0;") # 6. 进阶:监听窗口关闭事件(比如关闭前弹出提示) def closeEvent(self, event): # 这里先简单打印提示,后续会讲弹窗提示 print("你点击了关闭按钮!") # 允许窗口关闭(如果想阻止关闭,可调用event.ignore()) event.accept() if __name__ == "__main__": # 创建应用实例 app = QApplication(sys.argv) # 创建自定义窗口实例 window = MyWindow() # 显示窗口 window.show() # 启动主循环 sys.exit(app.exec_())mjqxa0yu.png图片 代码关键解析 类的封装:我们把窗口逻辑封装到MyWindow类中(继承QWidget),这是PyQt5开发的标准写法,便于后续拓展功能; 窗口图标:setWindowIcon(QIcon("图标路径")),新手注意路径要正确(代码和图标同目录可直接写文件名); 固定大小:setFixedSize() 适合不需要缩放的工具窗口,取消注释即可生效; 窗口置顶:Qt.WindowStaysOnTopHint 是Qt的内置常量,实现窗口始终在最上层; 关闭事件:重写closeEvent()方法,可在窗口关闭前执行自定义逻辑(比如保存数据、弹出确认弹窗)。 运行效果 运行代码后,会弹出一个浅灰色、置顶显示、带自定义图标的窗口,关闭窗口时控制台会打印“你点击了关闭按钮!”。 三、布局管理器入门:解决控件排列混乱问题 新手最容易踩的坑:直接用setGeometry()手动设置控件位置,窗口缩放后控件会错位、重叠。PyQt5提供布局管理器自动管理控件位置,核心是: 无需手动设置控件坐标,布局会自动分配空间; 窗口缩放时,控件会按比例自适应。 我们先学最基础的两种线性布局: QVBoxLayout:垂直布局(控件从上到下排列); QHBoxLayout:水平布局(控件从左到右排列)。 完整代码:线性布局实操(带按钮+标签) import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QHBoxLayout # 导入布局管理器 ) class LayoutWindow(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setWindowTitle("线性布局示例") self.resize(400, 300) # 1. 创建控件 label = QLabel("这是一个标签") btn1 = QPushButton("按钮1") btn2 = QPushButton("按钮2") # 2. 方式1:垂直布局(控件从上到下) # 创建垂直布局实例 layout = QVBoxLayout() # 向布局中添加控件(可添加多个) layout.addWidget(label) layout.addWidget(btn1) layout.addWidget(btn2) # 设置布局的间距(控件之间的距离,可选) layout.setSpacing(20) # 设置布局的边距(布局和窗口边缘的距离,可选) layout.setContentsMargins(50, 50, 50, 50) # 2. 方式2:水平布局(控件从左到右) # 取消注释以下代码,替换垂直布局 # layout = QHBoxLayout() # layout.addWidget(label) # layout.addWidget(btn1) # layout.addWidget(btn2) # 3. 将布局设置到窗口上(核心步骤,否则布局不生效) self.setLayout(layout) if __name__ == "__main__": app = QApplication(sys.argv) window = LayoutWindow() window.show() sys.exit(app.exec_())代码关键解析 布局使用三步法: 创建布局实例(QVBoxLayout()/QHBoxLayout()); 用addWidget()向布局中添加控件; 用setLayout()将布局绑定到窗口; 间距/边距设置: setSpacing():控件之间的间距(单位:像素); setContentsMargins(左, 上, 右, 下):布局和窗口边缘的距离; 自适应效果:运行后拖动窗口边缘缩放,控件会自动调整位置,不会错位。 对比:手动布局 vs 布局管理器 如果用手动布局(label.setGeometry(50,50,100,30)),窗口放大后标签和按钮仍停留在原地;而布局管理器会让控件均匀分布在窗口中,这是开发中必须掌握的核心技巧。 四、综合案例:带布局的多功能窗口(完整代码) 结合本节所有知识点,做一个带图标、置顶、垂直布局的完整窗口: import sys from PyQt5.QtWidgets import ( QApplication, QWidget, QLabel, QPushButton, QVBoxLayout ) from PyQt5.QtGui import QIcon from PyQt5.QtCore import Qt class ComprehensiveWindow(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): # 窗口基础属性 self.setWindowTitle("综合布局窗口") self.setWindowIcon(QIcon("icon.png")) # 替换为你的图标路径 self.setWindowFlags(Qt.WindowStaysOnTopHint) self.resize(400, 300) # 创建控件 title_label = QLabel("PyQt5布局演示") # 设置标签字体大小(简单美化) title_label.setStyleSheet("font-size: 18px; font-weight: bold;") btn_ok = QPushButton("确认") btn_cancel = QPushButton("取消") # 创建垂直布局 layout = QVBoxLayout() layout.addWidget(title_label) layout.addWidget(btn_ok) layout.addWidget(btn_cancel) layout.setSpacing(30) layout.setContentsMargins(80, 80, 80, 80) # 绑定布局 self.setLayout(layout) def closeEvent(self, event): print("窗口即将关闭!") event.accept() if __name__ == "__main__": app = QApplication(sys.argv) window = ComprehensiveWindow() window.show() sys.exit(app.exec_())运行效果:一个置顶的窗口,内部有大号标题标签和两个按钮,垂直排列且间距均匀,窗口缩放时控件自动适配。 mjqxbt56.png图片 五、常见问题排查 布局不生效:忘记调用setLayout(),或布局添加控件后未绑定到窗口; 图标不显示:图标路径错误(建议将图标放在代码同目录,直接写文件名); 窗口无法置顶:部分系统(如macOS)对窗口置顶有权限限制,属正常现象; 控件重叠:未使用布局,手动设置的控件坐标重复,优先用布局管理器解决。 总结 QWidget是PyQt5所有控件的基类,掌握setWindowIcon()/setFixedSize()等属性可自定义窗口样式; 布局管理器(QVBoxLayout/QHBoxLayout)是解决控件排列的核心,无需手动设置坐标,支持自适应; PyQt5开发建议封装成类,便于后续拓展功能(如监听事件、添加更多控件)。 下一篇我们会深入讲解PyQt5常用基础控件(标签、按钮、输入框)和信号与槽的核心逻辑,记得关注哦~如果有任何问题,评论区留言讨论! -
DedeCMS大成资源网源码 DedeCMS大成资源网源码,与小刀娱乐网、善恶资源网同款模板 PHP版本:5.6 MySQL版本:5.7 此为采用DedeCMS搭建的资源网,其模板与小刀娱乐网、善恶资源网相同。该系统并非最新版,切勿随意升级,否则会报错!系统部分文件代码已做修改。 若要安装系统,可访问:域名/install 恢复数据后的账号密码为admin IMG_20251228_223734.jpg图片 IMG_20251228_223755.jpg图片 IMG_20251228_223811.jpg图片 DedeCMS大成资源网源码 下载地址:https://pan.baidu.com/s/1Nw-ArIaj92Bza7mroLyAow?pwd=hr8g 提取码:hr8g DedeCMS大成资源网源码 下载地址:https://pan.quark.cn/s/39449c9e01a0 提取码: -
PyQt5入门指南:环境搭建与第一个桌面程序(超详细图文版) PyQt5入门指南:环境搭建与第一个桌面程序(超详细图文版) 哈喽,各位想入门GUI开发的小伙伴们~ 我是字节曜编辑寒烟似雪,今天开始,我们正式开启PyQt5从入门到精通的系列之旅!作为系列的第一篇,我会用最细致的步骤,带大家搞定PyQt5的环境搭建,并且写出第一个属于自己的桌面程序。全程无废话、无跳步,零基础也能轻松跟上,遇到问题还会附上排查方案,放心往下看~ 一、先搞懂:什么是PyQt5?为什么选它做GUI开发? 在动手之前,先简单了解下我们要学的工具: PyQt5是Qt框架的Python绑定版本,Qt是一款跨平台的C++图形用户界面开发框架,支持Windows、macOS、Linux等多个系统。简单说,PyQt5就是让我们能用Python这种简单易懂的语言,开发出专业、美观且能在多系统运行的桌面应用(比如办公软件、小游戏、数据可视化工具等)。 选择PyQt5的3个核心理由: 跨平台:写一次代码,多系统直接运行,不用重复开发; 功能强大:自带丰富的控件(按钮、表格、对话框等),满足大部分GUI开发需求; 学习成本低:结合Python的简洁语法,比直接学Qt(C++)门槛低很多,适合新手入门。 适用场景:桌面应用开发(如文本编辑器、数据管理工具、本地小工具等),不适合开发网页或手机APP哦~ 二、环境搭建:3大系统(Windows/macOS/Linux)详细步骤 环境搭建是入门的第一步,也是最容易踩坑的一步。这里分三个系统详细说明,你根据自己的电脑系统对应操作即可。核心准备:先安装Python,再安装PyQt5及配套工具包。 1. 前置准备:安装Python(所有系统通用) PyQt5需要依赖Python环境,建议安装Python 3.7-3.10版本(兼容性最好,太高版本可能存在部分依赖包不支持的问题)。 步骤: 访问Python官方下载地址:https://www.python.org/downloads/(无需科学上网,但是慢,可用阿里云镜像:https://mirrors.aliyun.com/python-release/,选择你的系统后选择版本即可); mjpq1alv.png图片 根据系统选择对应版本:Windows选“Windows Installer (64-bit)”,macOS选“macOS 64-bit universal2 installer”,Linux可通过系统自带软件商店安装; 安装注意事项: Windows系统:一定要勾选“Add Python 3.x to PATH”(自动配置环境变量,否则后续需手动配置,新手容易忘),然后点击“Install Now”默认安装即可; macOS/Linux系统:默认安装即可,安装完成后可通过终端输入命令验证。 验证Python是否安装成功: 打开终端(Windows按Win+R输入cmd,macOS按Command+空格输入terminal,Linux直接打开终端),输入以下命令:python --version # 或 python3 --version(macOS/Linux可能需要用python3)如果显示类似“Python 3.9.7”的版本号,说明安装成功;如果提示“不是内部或外部命令”,则是环境变量未配置好(Windows可重新运行安装包,勾选Add to PATH后修复安装)。 mjpq2x0t.png图片 mjpq4kpo.png图片 mjpq57lf.png图片 2. 安装PyQt5及工具包(所有系统通用) Python安装完成后,通过pip命令安装PyQt5核心包和配套工具包(pyqt5-tools包含Qt Designer可视化设计工具,后续做界面会用到,建议一起安装)。 步骤: 打开终端,输入以下安装命令(Windows/macOS/Linux通用): pip install pyqt5 等待安装完成:网络正常的情况下,几分钟即可安装完成。如果安装速度慢,可切换国内镜像源(推荐阿里云),命令如下: 验证是否安装成功: 在终端输入python(或python3),进入Python交互式环境,输入以下命令: import sys from PyQt5.QtWidgets import QWidget # 导入PyQt5的核心控件 print("导入成功")如果没有报错,显示“导入成功”,说明PyQt5安装成功;如果报错,参考下方“常见问题排查”部分。 mjpq6vqq.png图片 3. 环境搭建常见问题排查 新手在安装过程中容易遇到以下问题,提前整理好解决方案,遇到直接对应排查: 问题1:Windows系统安装pyqt5-tools失败,提示“error: Microsoft Visual C++ 14.0 or greater is required...” 解决方案:需要安装Microsoft Visual C++ Build Tools。访问微软官网下载:https://visualstudio.microsoft.com/visual-cpp-build-tools/,勾选“Desktop development with C++”,点击安装(无需安装完整的Visual Studio,仅安装工具集即可),安装完成后重新执行pip安装命令。 问题2:导入PyQt5时提示“ModuleNotFoundError: No module named 'PyQt5'” 解决方案:① 检查是否用错了Python版本(比如安装了Python3.9,但终端用的是python2),尝试用python3导入;② 检查pip是否对应正确的Python版本,Windows可输入“pip --version”查看,确保pip的路径是Python安装目录下的Scripts文件夹;③ 重新执行安装命令,加上--user参数:pip install pyqt5 pyqt5-tools --user。 问题3:macOS/Linux系统安装后,无法打开Qt Designer 解决方案:macOS/Linux系统的pyqt5-tools可能需要手动查找Designer路径,后续在讲解Qt Designer使用时会详细说明,此处先确保PyQt5能正常导入即可。 三、编写第一个PyQt5程序:Hello World窗口 环境搭建完成后,我们来写第一个程序——一个简单的“Hello World”窗口,感受一下PyQt5的魅力~ 这里用纯代码编写(后续会讲可视化设计工具),每一行代码都加详细注释,方便理解。 1. 步骤:新建文件并编写代码 新建一个文本文件,重命名为“first_pyqt5.py”(注意后缀名是.py,不是.txt,Windows系统要确保显示文件后缀名); 用记事本、VS Code、PyCharm等编辑器打开文件,粘贴以下代码(建议手动敲一遍,加深记忆): # 导入必要的模块 import sys # 导入PyQt5基础窗口相关控件 from PyQt5.QtWidgets import QApplication, QWidget if __name__ == "__main__": # 1. 创建应用程序实例(PyQt5程序必须有且仅有一个) app = QApplication(sys.argv) # 2. 创建基础窗口实例 window = QWidget() # 3. 设置窗口属性 window.setWindowTitle("我的第一个PyQt5程序") # 窗口标题 window.resize(400, 300) # 窗口大小:宽400px,高300px window.move(500, 200) # 窗口位置:距离屏幕左侧500px,顶部200px # 4. 显示窗口(默认隐藏,需手动调用show()) window.show() # 5. 启动应用主循环,确保程序正常退出 sys.exit(app.exec_())2. 运行程序 运行方式有2种,新手推荐第一种: 通过终端运行: 打开终端,切换到“first_pyqt5.py”文件所在的目录(比如文件放在桌面,Windows输入“cd Desktop”,macOS/Linux输入“cd ~/Desktop”); 输入运行命令:python first_pyqt5.py 如果没有报错,会弹出一个标题为“我的第一个PyQt5程序”的窗口,说明运行成功! 用编辑器运行:如果用VS Code或PyCharm,直接点击编辑器右上角的“运行”按钮即可(需要确保编辑器已选择正确的Python解释器)。 mjpqfq31.png图片 mjpqosc2.png图片 四、第一个程序运行原理解析 可能有小伙伴会疑惑,上面几行代码为什么能实现窗口?这里拆解核心逻辑,帮大家理解PyQt5程序的运行流程: QApplication(应用程序对象):每个PyQt5程序都必须有且只有一个应用程序对象,它负责管理程序的所有资源(如事件循环、窗口、控件等),sys.argv是为了让程序能接收命令行参数,简单程序也可以传空列表[]。 QWidget(窗口对象):这是PyQt5的基础窗口控件,所有的UI元素(按钮、标签等)都基于它。我们创建它的实例,就相当于创建了一个空白窗口。 窗口属性设置:setWindowTitle(标题)、resize(大小)、move(位置)都是QWidget的方法,用于自定义窗口样式,这些方法也可以省略,此时会显示默认大小和标题的窗口。 show()方法:PyQt5的窗口默认是隐藏状态,必须调用show()方法才能显示出来。 主循环(exec_()):这是程序的核心,启动后程序会进入“等待状态”,不断监听用户的操作(比如点击窗口、关闭窗口),并做出响应。sys.exit()确保程序关闭时能正确释放资源,避免内存泄漏。 简单总结流程:创建应用程序对象 → 创建窗口对象 → 设置窗口属性 → 显示窗口 → 启动主循环响应用户操作。 五、拓展:修改窗口,添加简单交互(可选) 如果觉得空白窗口太单调,可以简单修改代码,给窗口添加一个标签(显示“Hello World!”),代码如下(在原有代码基础上修改,新增部分标红): import sys # 新增导入QLabel(标签控件) from PyQt5.QtWidgets import QApplication, QWidget, QLabel if __name__ == "__main__": app = QApplication(sys.argv) window = QWidget() window.setWindowTitle("我的第一个PyQt5程序") window.resize(400, 300) window.move(500, 200) # 新增:创建标签控件,父对象是window(表示标签放在这个窗口里) label = QLabel("Hello World!", window) # 设置标签的位置和大小(距离窗口左侧150像素,顶部130像素,宽100像素,高40像素) label.setGeometry(150, 130, 100, 40) window.show() sys.exit(app.exec_())运行修改后的代码,窗口中会显示“Hello World!”文字,是不是更有成就感啦~ 这里的QLabel就是PyQt5的基础控件之一,后续我们会详细讲解各种控件的使用。 mjpqpf9u.png图片 六、总结 本篇我们完成了PyQt5入门的核心第一步: 了解了PyQt5的基本概念和优势; 完成了Windows/macOS/Linux三大系统的环境搭建(Python + PyQt5 + pyqt5-tools); 编写并运行了第一个PyQt5窗口程序,理解了程序的运行原理; 拓展添加了标签控件,实现简单的文字显示。 下一篇我们会深入学习QWidget基础窗口的更多属性设置,以及布局管理器的使用,解决控件排列混乱的问题。如果在环境搭建或程序运行过程中遇到问题,欢迎在评论区留言讨论~ -
FastbuildAI 开源 AI 问答系统源码下载 - Docker 部署多模型二次开发框架 FastbuildAI开源AI智能问答助手系统核心总结 FastbuildAI是一款免费开源的AI智能问答助手系统,开发语言与数据库类型均为“其它”,源码体积仅6MB。其核心定位是为开发者提供AI应用开发、测试、部署的一站式解决方案,支持快速构建企业级AI问答应用,适配客服、教育、智能助手等多场景。 mjppn2g0.png图片 mjppnaz7.png图片 mjppnh1l.png图片 一、核心信息 开源协议:遵循Apache License 2.0协议,允许用户自由使用、修改及分发源代码; 部署方式:基于Docker容器化部署,操作简单,执行拷贝配置文件、Docker启动命令即可(核心命令:docker compose -p fastbuildai --env-file ./.env.production.local -f ./docker/docker-compose.yml up -d),启动后2-3分钟可通过浏览器访问; 默认账号:超级管理员用户名admin,密码FastbuildAI&123456; 文档支持:提供完整中文文档与详尽代码注释,降低中文开发者上手成本。 二、核心功能模块 AI对话(AI Chat):支持多模型交互,具备自然语言理解与生成能力,适配各类问答场景; 模型上下文协议调用(MCP Invocation):实现多AI模型间上下文共享与协作,提升复杂任务处理效率; 用户充值系统(User Recharge):含余额管理与支付功能,支持订阅制或按次计费的商业化部署; 模型管理(Model Management):支持AI模型的上传、部署、配置与监控,可灵活管理多版本模型; 知识库(Knowledge Base):集中管理知识文档,支持上传、分类与检索,提升AI问答准确率; 智能代理(Intelligent Agents):可构建自主任务代理,实现自动化数据处理、任务调度等; 工作流(Workflow):提供可视化流程设计,支持AI任务流程自动化,适配复杂业务逻辑; 插件系统(Plugin System):支持自定义功能模块扩展,增强系统灵活性与可维护性。 三、源码特色 开箱即用:Docker部署简化环境配置,搭配一键启动脚本,部署门槛低; 易于扩展:模块化架构实现功能解耦,支持插件机制,方便二次开发与新功能集成; 多模型协同:支持多AI模型接入,通过MCP协议实现模型间协作,提升智能性; 商业化适配:内置用户权限管理与支付体系,适合直接落地商业化AI应用; 中文化友好:全程中文文档与界面支持,契合中文开发者使用习惯。 下载 下载地址:https://pan.quark.cn/s/33d51fe8b8b2 提取码: 四、适用场景 适用于企业级AI客服系统、智能助手、教育平台搭建,也可作为个人开发者的项目开发框架、编程学习素材,或用于研究AI应用的二次开发与定制化扩展。 -
HTML5欢乐斗地主小游戏源码下载 - 免费跨平台二次开发学习素材 HTML5欢乐斗地主小游戏源码:免费跨平台,开发学习+休闲娱乐双适配 想找款经典又好上手的斗地主游戏源码?不管是JavaScript新手练手、教育机构做教学案例,还是想快速搭建一款休闲小游戏,这款HTML5欢乐斗地主小游戏源码都超合适!用HTML5、CSS3和JavaScript联合开发,数据库类型为其它,整体体积仅367KB,轻巧不占地,还能免费获取,性价比直接拉满。 mjppfolx.png图片 这款源码完全依托Web技术打造,不用装任何插件,打开主流浏览器(Chrome、Firefox、Safari等)就能流畅运行,不管是PC、平板还是手机,都能适配得很好。代码设计简洁高效,核心玩法还原经典斗地主,还支持二次开发,不管是想改规则、换素材,还是扩展新功能,都能轻松实现,不管是个人开发者还是小型团队,用起来都很顺手。 下载 下载地址:https://pan.quark.cn/s/f1a019a5d618 提取码: 核心功能:还原经典,玩法无短板 经典玩法全覆盖:支持单人模式(和AI对战)和多人模式(本地模拟或后续扩展联网),发牌、叫地主、出牌、计分这些核心规则都完整实现,还能自动判断单张、对子、顺子、炸弹等牌型,验证出牌是否合法,完全还原线下斗地主的乐趣; AI对手有来有回:内置简单AI逻辑,能模拟真实玩家的出牌策略和抢地主决策,就算是单人玩,也不会觉得枯燥,互动感拉满; 界面交互超直观:采用响应式布局,不同设备上都能有舒服的操作体验;牌桌界面清晰,支持拖拽出牌、点击提示,还有发牌、出牌的动画特效,玩起来更有沉浸感; 音效视觉可定制:自带发牌声、出牌声、胜利音乐等多种音效,氛围感十足;还能自己换卡牌样式、背景图片和UI主题,打造专属风格; 计分存储超贴心:实时记录得分,支持多局累计积分,游戏结束后会显示胜负结果和详细得分统计;还能通过浏览器本地存储保存游戏进度和玩家数据,就算关了页面再打开,也能接着玩;后续想扩展成联网多人对战,也有基础可依托(需额外开发)。 源码特色:轻量灵活,实用性拉满 轻量跨平台无压力:纯Web技术实现,不用安装任何软件插件,主流浏览器都能兼容;资源占用特别低,不管是Web端部署还是移动端访问,都能快速加载,流畅运行; 二次开发门槛低:代码是模块化设计,核心逻辑和界面展示是分开的,想修改游戏规则、替换素材都很方便;还附带详细注释和文档,就算是新手,也能快速上手; 学习价值超高:特别适合JavaScript初学者学习游戏开发逻辑,比如事件处理、状态管理、动画实现这些知识点;也能作为教学案例,帮助理解面向对象编程和HTML5 Canvas/SVG技术; 离线也能玩:不用联网就能正常运行,不管是通勤时打发时间,还是教学演示时没网络,都能派上用场。 总结 这款HTML5欢乐斗地主小游戏源码真的是“全能型”素材!对普通玩家来说,它是一款不用安装、即开即玩的经典休闲游戏;对开发者和学习者来说,它体积轻巧、代码清晰、支持定制,是练习Web开发、积累项目经验的好帮手;对教育机构来说,也能作为编程教学的实用案例。不管你是想找款小游戏放松,还是想入门游戏开发、快速搭建项目,这款免费源码都值得一试! -
疯狂跑步者HTML5网页游戏源码下载 - 免费跨平台跑酷二次开发素材 疯狂跑步者HTML5网页游戏源码:轻量跨平台跑酷开发好素材 不管是跑酷游戏爱好者想找款即开即玩的小游戏,还是有编程基础的开发者想找二次开发素材,《疯狂跑步者》这款HTML5网页游戏源码都很合适!它用HTML语言开发,数据库类型为其它,整体体积仅4.4MB,特别轻巧,免费就能获取,性价比超高。 mjppcfa0.png图片 这款源码依托HTML5技术打造,不用复杂安装流程,玩家只要打开浏览器就能直接访问游玩,省去了下载安装的麻烦。游戏画面走简洁明快的风格,色彩鲜艳亮眼,搭配上紧张刺激的背景音乐和音效,玩起来特别有沉浸感,能给跑酷爱好者带来不一样的游戏体验。而且源码开放性很强,有编程基础的朋友完全可以拿来做二次开发或定制,改成自己喜欢的样子。 下载 下载地址:https://pan.quark.cn/s/f976f655c114 提取码: 核心功能:操作简单,玩法上头 操作毫无门槛:全程用鼠标就能控制,点击一下就能让游戏人物跳跃,不管是躲避路上的障碍物,还是收集金币、道具,都能轻松上手,新手也能快速摸清规律; 启动流程顺畅:游戏加载完成后,先点播放按钮,再点击屏幕就能正式开始,没有多余的复杂步骤,打开就能玩,不耽误时间; 玩法目标明确:核心就是控制人物尽量跑得更远,同时收集沿途的金币和道具,跑得越远、收集的东西越多,得分就越高,特别考验反应速度和操作技巧,越玩越上瘾。 源码特色:轻量实用,适配性强 跨平台无压力:靠着HTML5技术的优势,不管是PC电脑、平板还是手机,只要有浏览器就能运行,而且不同设备上的游戏体验都保持一致,随时随地都能玩; 轻量加载快:源码经过优化,体积小巧,就算网络条件不太好,加载也比较迅速,不会出现长时间卡顿的情况,流畅度有保障; 开发潜力大:作为开源性质的源码,不仅适合新手用来学习HTML5游戏开发,也适合有经验的开发者进行二次定制,不管是调整游戏规则、更换画面元素,还是增加新功能,都有很大的操作空间。 服务器环境要求 需要注意的是,这款源码得在服务器环境下才能正常运行。第一次加载的时候,如果资源较多,可能会出现加载稍慢的情况,建议耐心等一等,或者多刷新几次页面,就能优化加载体验啦。 总结 《疯狂跑步者》HTML5网页游戏源码真的是一款兼顾趣味性和实用性的好素材!对普通玩家来说,它是一款不用安装、即开即玩的休闲跑酷小游戏,能打发碎片时间;对开发者来说,它体积轻巧、开放性强,是学习HTML5游戏开发、进行二次创作的优质素材。如果你喜欢跑酷游戏,或者想探索HTML5游戏的开发乐趣,这款免费源码绝对值得一试! -
证件照助手下载 - 免费无广告离线证件照制作软件(换背景+全尺寸) 证件照助手无广告版:手机免费做合格证件照,离线也能用 最近要办护照、考四六级、换驾驶证,或是找工作需要证件照?是不是总觉得照相馆拍的不自然,微笑角度不对、光线色差显憔悴,甚至皮肤瑕疵、头发凌乱都被拍得清清楚楚?不用再费心跑照相馆排队,也不用为不合心意的照片纠结,证件照助手v1.0.1无广告纯净版,手机上就能轻松搞定各类证件照,省钱又省心! mjpp8291.png图片 这款软件全程支持中文界面,适配Android系统,仅16MB的小巧体积,安装后不占多少手机内存,日常放在手机里应急特别方便。最贴心的是,它完全免费、无广告打扰,不用注册登录,就算没网络也能正常使用,随时随地都能制作证件照。 核心功能:一键搞定证件照全需求 多底色自由切换:内置白色、蓝色、红色、深蓝色、亮蓝色、灰色等多种背景色,不管是护照、身份证、驾驶证需要的白色背景,毕业证、工作证要用的蓝色背景,还是结婚照、医保卡所需的红色背景,都能一键切换,满足不同证件的要求。 全规格尺寸覆盖:包含标准一寸、小一寸、大一寸、标准二寸、小二寸、大二寸,还有三寸、四寸、五寸、六寸等常用尺寸,以及结婚登记照、电子驾照、身份证、公考照、大学生图像信息采集、电子社保卡等专项证件尺寸,不用自己换算像素,一键就能生成对应规格的合格证件照。 智能抠图超精准:不用手动涂抹,软件能自动识别照片主体,精准抠图去除原有背景,就算头发丝、衣物边缘也能处理得干净自然,换背景时不会出现模糊、残留的情况。 便捷导出保存:制作完成后,一键就能导出证件照,长久保存在手机里,后续打印、线上提交都方便,不用反复制作。 软件亮点:解决拍照痛点,实用又省心 无广告无套路:全程没有弹窗广告,也没有多余的捆绑功能,打开就是纯粹的证件照制作界面,操作过程不被打扰。 离线可用超灵活:不需要联网,就算在没信号的地方,只要手机里有照片,就能随时制作证件照,应急场景超实用。 操作简单零门槛:不管是年轻人还是长辈,都能轻松上手——选择照片、挑选底色、选定尺寸,三步就能生成合格证件照,不用学习复杂的修图技巧。 兼顾美观与合规:不仅能解决原照片的光线、肤色问题,还能轻微优化皮肤状态,让证件照既好看又符合官方要求,不会因为过度美化导致无效。 下载 下载 下载地址:https://pan.quark.cn/s/ff11f84adea2 提取码: 总结 证件照助手无广告纯净版,完美解决了大家拍证件照的各种麻烦——不用跑照相馆、不用花钱、不用忍受不自然的拍摄效果。16MB的小巧体积、无广告离线使用的优势,再加上全尺寸覆盖、多底色切换、智能精准抠图的实用功能,让手机就能成为“移动照相馆”。不管是日常应急、线上报名,还是办理各类证件需要证件照,用它都能快速做出合格又好看的照片,性价比超高,强烈推荐大家试试! -
Gif助手下载 - 轻量视频转GIF+动图制作分解编辑工具(清爽版) Gif助手清爽版:轻量高效的手机动图制作与编辑工具 Gif助手v3.9.9清爽版作为一款专注于动图处理的手机工具,凭借功能实用、操作便捷、体积轻巧的优势,成为日常动图创作、社交分享的得力帮手。界面全程支持中文显示,适配Android系统,仅10.08MB的超小安装体积,不占用过多手机内存,让用户随时随地都能轻松处理动图。 mjpp1pxb.png图片 核心功能:全方位覆盖动图处理需求 多模式GIF制作:支持将多张静态图片合成为动态GIF,用户可自由按时间、日期、文件名称等方式排序图片,同时能灵活调节GIF播放速率,还可根据需求选择不同图像质量,兼顾动图效果与文件大小。 视频转GIF截取:无需复杂操作,可直接从视频中精准截取目标片段,快速转化为GIF动图,轻松捕捉视频中的精彩瞬间,满足社交分享、趣味表达等场景需求。 多功能GIF播放:不仅支持常规播放,还提供逐帧浏览功能,让用户清晰查看每一张帧画面;播放过程中可随时保存喜欢的任意一帧作为静态图片,相当于自带“GIF截图”功能,实用性拉满。 批量GIF分解:能将单张或多张GIF动图快速拆解为独立静态图片,无数量限制,方便用户提取动图中的关键画面,或进行二次创作。 附加实用工具:内置GIF压缩、倒放等便捷功能,可按需减小动图体积,或制作趣味倒放效果;所有处理后的图片自动保存至sdcard/GifDir/目录,方便用户查找与管理。 软件特色:清爽实用,上手无门槛 轻量不占地:10.08MB的小巧体积,安装快速,运行时不占用过多系统资源,让手机保持流畅运行; 清爽无干扰:“清爽版”定位主打无冗余广告、无后台捆绑,为用户提供干净纯粹的操作环境,专注动图处理不被打扰; 功能全覆盖:从动图制作、视频转GIF,到播放浏览、拆解提取,再到压缩、倒放等编辑功能,一站式满足动图全流程处理需求; 操作零难度:界面设计简洁直观,功能分类清晰,无论是新手还是资深用户,都能快速上手,无需复杂学习即可完成动图制作与编辑。 下载 下载 下载地址:https://pan.quark.cn/s/d3770b83c7f5 提取码: 总结 Gif助手清爽版以“轻量、实用、好上手”为核心亮点,精准覆盖日常动图处理的各类场景——无论是将照片做成趣味动图、截取视频精彩片段转GIF,还是拆解动图提取静态画面、编辑动图播放效果,都能高效完成。小巧的体积、清爽的体验和全面的功能,让它成为手机端动图处理的性价比之选。如果你经常需要制作、编辑动图用于社交分享、工作沟通或日常娱乐,这款Gif助手清爽版绝对值得一试! -
Magir AI绘画APP下载 - 免费多风格AI头像制作+文字转艺术工具 Magir AI绘画APP:免费多风格创作工具,解锁你的艺术想象力 Magir AI绘画APP作为一款备受瞩目的免费AI创作工具,凭借丰富的风格选择、便捷的操作体验和强大的生成能力,成为AI绘画爱好者的心头好。该软件目前已更新至v4.1.8安卓版,界面支持中文显示,适配Android系统,77MB的安装体积,让用户无需占用过多手机空间,即可随时随地开启创意创作。 mjpou6ud.png图片 核心功能:AI赋能,轻松实现艺术表达 AI专属头像生成:内置AI Avatar Creator工具,只需上传个人资料照片,就能生成多种风格与场景的专属头像。无论是动漫风、梦幻艺术风、皮克斯动画风,还是赛博朋克风,亦或是黎明、前传等主题场景,都能一键解锁,让你的头像在社交平台脱颖而出。 文字秒变艺术作品:依托训练了数百万张网络图像的AI艺术生成器,用户只需输入创意文字描述,或上传参考图片,短短几秒就能将脑海中的奇幻场景转化为独特迷人的艺术画作,让创意不再局限于想象。 多元风格自由选择:覆盖丰富创作风格,满足不同审美需求——喜欢鲜艳色彩与粗线条,可选择AI漫画滤镜;偏爱细腻细节,能尝试动漫艺术风格;追求真实质感,照片级逼真图像生成功能让你惊艳。此外,还包含小清新、卡通、可爱、Q版等多种像素画风格,创作选择更全面。 海量作品灵感汲取:内置全球用户创作的优质作品库,用户可随时浏览探索,从不同创意和风格中获取灵感,不断提升自身AI创作水平,解锁更多创作可能。 便捷分享传播:支持将生成的艺术作品一键分享给亲友,或发布至QQ空间、各类社交媒体平台,加入#MAGIRAI潮流,与全网用户交流创作心得,展示艺术才华,收获满满的创作成就感。 软件优势:无门槛创作,兼顾趣味与实用 全程免费无套路:所有功能、风格及素材均免费开放,无需付费订阅,就能享受完整的AI绘画体验,降低创作门槛。 操作简单易上手:采用像素级绘制逻辑,操作不复杂,只需移动手指就能完成创作,同时操作逻辑贴合主流AI绘画工具,新手也能快速掌握。 风格覆盖全面:融合像素画、漫画、动漫、照片级逼真等多种风格,无论是日常创作、社交头像制作,还是创意艺术表达,都能找到适配风格。 社交属性拉满:支持作品分享、收藏与交流,既能与亲友共同欣赏创作成果,也能在社交平台收获认可,满足创作展示与互动需求。 下载 下载 下载地址:https://pan.quark.cn/s/a7a4d0c27479 提取码: 总结 Magir AI绘画APP以“免费、多元、便捷”为核心亮点,借助人工智能的强大力量,让每一位用户都能轻松释放创造力。无论是想制作专属风格头像、将文字转化为艺术画作,还是探索像素画、漫画等多种创作形式,它都能提供高效优质的创作支持。无需专业绘画功底,只需动动手指,就能将想象力变为现实。如果你热爱AI绘画,渴望用创意表达自我,这款免费且功能强大的Magir AI绘画APP绝对值得一试! -
图叨叨APP下载 - 无广告多功能手机图片编辑工具(美颜/拼图/去水印) 图叨叨APP:无广告多功能手机图片编辑工具,轻松打造创意作品 图叨叨作为一款备受好评的手机图片编辑应用,专为追求高品质图片制作与美化的用户量身打造,凭借全面的功能、简洁的操作和纯净的使用体验,成为手机端图片处理的热门选择。该软件目前已更新至v6.9.5安卓版,界面全程支持中文显示,适配Android系统,仅26.84MB的轻巧体积,不占用过多手机内存,让用户随时随地都能开展图片编辑。 mjpof0wa.png图片 核心功能:覆盖基础与高级的全场景编辑 图叨叨集成了丰富多样的图片处理工具,从基础美化到创意制作,全方位满足用户多样化需求: 美颜与滤镜特效:内置丰富美颜参数与风格化滤镜,无论是优化肤色、磨皮祛痘,还是打造复古、清新、电影感等多种风格,都能一键实现,让普通照片焕发独特质感; 全能拼图功能:支持宫格拼图、模板拼图等多种样式,用户可自由搭配多张图片,调整间距、边框,创造出极具个性的拼图作品; 精准剪切与去水印:提供高精度剪切工具,支持自由裁剪、固定比例裁剪,同时具备高效去水印功能,轻松去除图片中多余水印或无关元素,让画面更整洁; 长图拼接工具:可将多张分散图片无缝拼接成长图,无论是旅行照片合集、聊天记录整理,还是教程步骤展示,都能清晰呈现完整内容; 电影台词制作:内置多款电影感台词模板,用户可添加文字、调整字体、颜色与排版,快速制作出氛围感十足的电影台词截图; 智能图片压缩:支持多维度压缩设置,在大幅减小图片体积的同时,能最大程度保留原分辨率与Exif信息,兼顾传输效率与图片质量; 视频转动图:支持将视频片段转换为GIF动图,精准捕捉视频中的精彩瞬间,让静态图片也能传递动态趣味。 软件特色:好用又省心的编辑体验 纯绿色无广告:全程无弹窗广告、无后台冗余运行,为用户提供清爽纯净的编辑环境,专注创作不被干扰; 模板特效丰富:海量精美模板与创意特效持续更新,涵盖节日、日常、社交平台等多种场景,自由组合搭配,轻松打造具有个人特色的图片作品; 操作简洁易上手:界面设计简洁明了,功能分类清晰,无论是新手还是资深用户,都能快速找到所需工具,无需复杂学习即可上手操作; 功能全面无短板:兼顾基础编辑与高级创意功能,从简单的裁剪美颜到复杂的台词制作、动图转换,一站式满足图片处理全需求; 一键便捷分享:编辑完成后,支持直接分享至各大社交媒体平台,无需额外保存传输,快速与朋友分享自己的创意作品。 下载 下载 下载地址:https://pan.quark.cn/s/fc1ee63209c7 提取码: 总结 图叨叨凭借“功能全、操作简、无广告”的核心优势,成为手机端图片编辑工具的优质之选。无论是日常照片美化、拼图制作、水印去除,还是创意电影台词图、GIF动图制作,它都能以高效便捷的方式满足用户需求。丰富的模板与特效为创作提供更多灵感,轻巧的体积与流畅的运行体验,让图片编辑成为一种乐趣。如果你正在寻找一款实用性与易用性兼具的手机图片编辑APP,图叨叨绝对值得一试! -
BongoCat 开源桌面宠物下载 - 跨平台萌趣互动免费桌面工具 前言 大家好,我是字节曜的编辑寒烟似雪。今天为大家带来的是BongoCat开源互动桌面宠物。它作为一款风靡全球的开源互动桌面宠物应用,BongoCat凭借软萌的形象与实用的功能,成为无数用户工作学习中的“治愈系伙伴”。该软件目前已更新至v0.2.1电脑安装版,于2025年4月25日正式上线,所属电脑软件分类下的“其它工具”栏目,界面支持中文显示,适配Windows全系列系统,仅需5.1MB的超小体积,即可为桌面注入满满活力。 mjpo3792.png图片开发背景:跨平台升级的萌趣之作 BongoCat的创作灵感源自MMmmmoko大佬的经典作品Bongo Cat Mver。初代版本仅支持Windows系统,为了让更多用户感受到互动陪伴的乐趣,开发者决定对项目进行深度优化与扩展。借助Tauri框架强大的跨平台能力,BongoCat成功突破系统限制,如今已实现Windows、macOS、Linux三大主流系统的全面适配,让全球不同设备用户都能轻松拥有这只可爱的桌面猫咪。 核心功能:互动与便捷兼具 智能键盘响应:能够精准识别用户的键盘操作,尤其针对左右两侧的Shift、Ctrl、Alt键,会触发对应的专属动画,每一次按键都能收获萌趣反馈,让操作过程更具趣味性; 自由位置调节:用户可根据个人使用习惯,随意拖动猫咪在屏幕上的摆放位置,既能让它时刻出现在视线中,又不会影响正常工作学习操作; 全平台兼容:无论使用的是Windows电脑、macOS设备还是Linux系统,BongoCat都能完美运行,无需担心兼容性问题; 专属下载选项:针对不同硬件架构和操作系统类型,提供定制化安装包,确保软件运行时的稳定性与最佳性能表现。 特色亮点:开源+轻量的双重优势 治愈系动画表现:以软萌的动作神态和丰富的表情设计圈粉无数,每一次互动都能带来轻松愉悦的体验,有效缓解工作学习压力; 开源生态共建:作为开源项目,BongoCat向所有开发者敞开大门,欢迎大家贡献代码、提出优化建议,通过社区的集体智慧持续推动项目迭代升级; 轻量低耗运行:依托Tauri框架的高效实现,软件运行时对系统资源的占用极低,即使长时间开启,也不会影响其他程序的正常运行,告别卡顿困扰; 易用性拉满:无论是否具备专业技术背景,用户都能轻松完成下载、安装与使用流程,上手门槛极低。 收费说明:完全免费的开源福利 BongoCat秉持开源免费的核心原则,用户无需支付任何费用,即可下载安装并享受全部功能。得益于开源属性,用户不仅可以自由查看源代码,还能根据自身需求参与项目开发、提出改进方案,甚至自行修改定制专属版本,充分满足个性化使用需求。 BongoCat下载 下载地址:https://pan.quark.cn/s/df21e5558a96 提取码: 总结 BongoCat早已超越普通桌面宠物软件的范畴,更像是一位不离不弃的“数字伙伴”,在枯燥的工作学习间隙带来治愈与欢乐。跨平台适配的便捷性、萌趣十足的互动表现、轻量低耗的运行优势,再加上开源免费的友好属性,让它收获了全球大量用户的青睐。如果您想为电脑桌面增添一抹活力,或是寻找一款能缓解压力的小工具,BongoCat绝对是不容错过的选择!