找到
90
篇与
寒烟似雪
相关的结果
- 第 4 页
-
免费分享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 结语 不管是直接部署使用,还是基于源码二次开发定制专属功能,都能满足需求,免费无套路,是企业建站的高性价比选择! -
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详细信息,解决日常网络使用疑问;企业可借助它搭建多出口网络监控平台,实时掌握网络状态;开发者可基于源码二次开发,扩展更多个性化功能。无套路免费获取,实用性拉满,强烈推荐大家试试! -
阶段一实战项目:仿照记事本开发简易文本编辑器(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常用基础控件(标签、按钮、输入框)和信号与槽的核心逻辑,记得关注哦~如果有任何问题,评论区留言讨论! -
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绝对是不容错过的选择! -
城市天际线 2 手机版下载 - 高自由度都市建造模拟经营游戏攻略 前言 我是字节曜编辑寒烟似雪,今天为大家带来的是《城市天际线2手机版》(Cities: Skylines II)。它作为一款备受瞩目的城市建设模拟经营手游,凭借其超高自由度的玩法设计与深度沉浸的模拟体验,成为策略规划爱好者的不二之选。该游戏由Colossal Order精心研发、Paradox Interactive联合发行,于2025年10月20日完成v2.2.5版本更新,适配Windows全系列系统,以123MB的轻量化体积,呈现出媲美端游的丰富内容,界面支持中文显示,操作便捷易上手。 mjpnybn8.png图片 mjpnyi0c.png图片核心功能:打造专属理想都市 这款生活应用类手游赋予玩家全能市长的身份,从一片空白土地出发,构建功能完备的现代都市。核心功能涵盖六大维度: 道路规划自由灵活,可随心搭建主干道、支路、环线及立体交叉系统,搭建城市交通骨架; mjpnx419.png图片 全品类建筑体系,涵盖住宅区、商业区、工业区三大核心区域,搭配学校、医院、警察局、消防站等公共服务设施,满足城市多元需求; 完善市政管理系统,玩家可自主调控税收政策、分配财政预算,优化公共服务资源配置,平衡城市发展节奏; 真实交通模拟引擎,精准还原市民通勤、物流运输等日常流动场景,交通状况直接影响城市运转效 率; mjpnxg9y.png图片 全面基础设施建设,涵盖垃圾处理、污水处理、电力供应、水资源管理等关键模块,保障城市可持续运转; 开放MOD生态,支持导入第三方创作内容,无论是特色建筑、自定义地图还是拓展功能,都能极大丰富游戏玩法。 特色亮点:升级体验超越前作 相较于前作,《城市天际线2手机版》在多个维度实现重大突破: 视觉与AI双升级,采用更精细的图形渲染技术,城市景观细节拉满,同时优化市民AI行为模型,使其决策更贴近现实逻辑; 拟真经济系统,产业供需关系、就业率波动、地价动态调整等要素相互作用,真实反映城市经济运行规律,为规划带来更多挑战与乐趣; 地形编辑自由随心,支持自定义地图地貌,山地、湖泊、海岸线等多样化地形均可亲手打造,解锁更多建设可能; 移动端专属优化,针对触屏设备重构操作界面,简化复杂操作流程,让城市规划在手机上也能高效便捷; 丰富社区资源,开放的MOD支持吸引海量创作者参与,玩家可共享优质内容,持续拓展游戏边界。 道路规划攻略:打造畅通都市 道路是城市的血脉,合理规划是避免拥堵的关键: 善用道路工具:道路管理功能需通过游戏初期发展点数解锁,建议优先解锁核心工具。可对交叉路口进行改造美化,比如添加或删除斑马线、停止标志,调整红绿灯时长,禁止或允许车辆左转、直行、右转等行驶模式;同时可优化道路配套设施,如添加人行道树、路灯、隔音墙,或删除绿化带、隔离带,提升道路使用体验与通行效率。 科学设置高速出入口:观察初始高速走向,合理增设城西、城东等区域的高速出入口,分散车流压力;必要时可启用机动车限行措施、大型车辆限行令等政策,禁止特定车辆进城,缓解高速路口拥堵。 推进快速化改造:在人流密集、车流量大的核心区域,合理布局快速路系统,帮助过境车辆快速通行,避开拥堵路段,提升跨区域交通效率。 优化公共交通:适当增加公交线路可减少私家车出行数量,但需避免盲目增开,过多公交车辆反而会挤占道路空间,加剧拥堵。 搭建人行通道:针对步行出行市民较多的区域,修建天桥实现人车分流,同时完善人行道网络,发挥其“毛细血管”作用,构筑城市道路“微循环”系统,提升通行效率。 游戏玩法与说明 核心玩法 深度模拟决策:游戏AI与经济系统复杂度高,玩家的每一个规划决策都会对城市发展产生连锁反应,需灵活制定策略,解决各类突发问题,应对动态变化的城市挑战; 自由城市建设:从道路铺设到设施建造,从区域规划到系统搭建,全程自主掌控,打造独一无二的专属城市; 合理产业布局:科学划分工业区、教育区等功能区域,通过贸易往来激活区域经济,为工业发展注入持续动力; 精细财政管理:平衡城市收支预算,在满足市民居住、就业、教育、医疗等需求的同时,保障城市长期稳定发展。 游戏说明 游戏核心围绕城市管理与模拟经营展开,玩家需兼顾基础设施建设与居民满意度提升。除自由建设模式外,还包含多种预设场景与挑战模式,玩家可在特定条件下检验自己的城市规划能力。此外,游戏支持模组(Mod)功能,玩家既可下载现成内容,也可自主创作,让游戏体验始终保持新鲜感。 更新日志 修复部分安卓设备启动闪退的兼容性问题; 新增简体中文语言支持,优化本地化文本显示效果,提升中文用户体验; 优化大型城市运行帧率,减少高负载情况下的卡顿现象,保障游戏流畅性; 调整道路建造工具的触控精度,操作手感更顺滑,规划效率大幅提升; 修复污水处理厂在高负载运行时失效的Bug,保障基础设施稳定运转。 无论是追求极致规划的策略玩家,还是喜爱创造的模拟经营爱好者,《城市天际线2手机版》都能带来沉浸式的都市建设体验,快来下载开启你的市长生涯,打造属于自己的繁华都市吧! 下载 城市天际线2手机版 下载地址:https://pan.quark.cn/s/d6487972cd59 提取码: 城市天际线2手机版 下载地址:https://pan.baidu.com/s/1doc_T0a9IeID5rP6ud0EUw?pwd=fxrp 提取码: -
家具企业官网源码 免费 HTML 家具网站模板 SEO 友好易定制 前言 大家好,我是字节曜的编辑寒烟似雪。对于家具行业的企业负责人、小型工作室创业者,或是想入局家居赛道的创业者来说,拥有一个专业、美观的官方网站,是展示产品、吸引客户、拓展市场的关键。今天就给大家分享一款宝藏源码——HTML精美家具公司企业网站源码,无需高薪请开发团队,就能快速搭建起符合行业需求的优质企业官网! 头图图片一、基础信息速览:轻量免费,适配全类型家具企业 这款源码基于HTML+CSS开发,整体体积仅6.90MB,轻量化设计让网站加载更快,不会给服务器带来过多压力。功能模块贴合当下家具企业的建站需求,兼容性极强——不管你是刚起步的小型家具工作室,还是有一定规模的大型家具制造企业,都能直接使用,无需额外适配调整。 下载 下载地址:https://pan.quark.cn/s/8c0d1133c2fc 提取码: 最让人惊喜的是,它完全免费提供,没有隐藏收费项目,能帮企业省去一笔可观的网站开发或模板采购费用。而且源码无需依赖复杂的主流数据库,部署门槛低,就算是没有专业技术团队的中小企业,也能轻松上手搭建。 二、核心功能模块:精准匹配家具企业需求,一站式搞定品牌展示 这款源码的功能设计完全围绕家具企业的核心需求展开,从产品展示到客户互动,每个模块都实用又贴心,不用额外二次开发就能满足日常运营需求。 1. 首页展示:第一眼抓住客户注意力 首页配备高清轮播图区域,可直接展示热门家具产品、新品上市海报或促销活动,动态视觉效果能快速吸引用户停留;同时设置简洁明了的公司简介板块,用精炼的文字介绍企业发展历程、经营理念和团队实力,帮助用户快速建立信任感;还有特色产品推荐区,突出展示企业核心竞争力产品,附带图片、名称和详情链接,引导用户进一步了解。 2. 产品展示:让客户全面了解产品优势 产品展示模块是家具网站的核心,这款源码支持多维度分类——可按产品类型(卧室家具、客厅家具、餐厅家具等)、风格(现代简约、欧式古典、中式风格等)或材质(实木、板式、皮质等)划分,方便客户根据自身需求快速查找;每个产品都有独立的详情页,包含高清图片、详细参数、规格尺寸、使用说明和材质介绍,让客户全方位了解产品特点;还支持用户评价和在线咨询功能,方便客户交流体验、咨询疑问,助力转化。 3. 新闻资讯:增强用户粘性,树立专业形象 内置新闻资讯板块,可发布公司动态(如新品发布、活动通知)和行业知识(如装修技巧、家居搭配建议)。一方面能让客户及时了解企业发展和行业趋势,增强互动粘性;另一方面通过分享专业内容,能树立企业在行业内的专业形象,提升品牌认可度。 4. 联系互动:打通客户沟通渠道 提供完善的联系与互动功能:详细地址+地图导航,方便客户实地探访;展示联系电话、电子邮箱、在线客服等多元联系方式,让客户随时能沟通咨询;还设置留言反馈表单,客户可提交意见、建议或咨询问题,企业能及时回复,强化与客户的连接。 三、源码核心特色:美观易改,还能助力SEO引流 除了实用的功能,这款源码的多个特色的也让它在同类产品中脱颖而出,特别适合家具企业使用。 1. 设计精美,适配多设备 采用现代简约的设计风格,色彩搭配协调、页面布局合理,细节处理到位,视觉体验舒适,完全符合家居行业的审美需求;同时支持响应式设计,能自适应电脑、笔记本、平板、手机等不同尺寸的设备,不管客户用什么终端访问,都能获得流畅一致的浏览体验,覆盖更多潜在客户。 2. 易于定制,新手也能操作 源码的代码结构清晰规范,注释详细,就算是没有丰富编程经验的人员,也能根据企业需求修改网站内容、调整样式和功能,比如替换品牌logo、修改产品分类、更新轮播图等,轻松打造专属品牌官网,无需依赖专业开发人员。 3. 优化到位,SEO友好引流 源码对HTML、CSS和JavaScript代码进行了优化,减少冗余内容,提升网站加载速度,避免因加载慢导致客户流失;更重要的是,源码在开发时充分考虑了SEO因素,采用合理的网站结构、关键词布局和元标签设置,有助于提高网站在搜索引擎中的排名,让潜在客户更容易找到企业官网,自然提升流量和曝光度。 总结:家具企业建站的高性价比选择 这款HTML精美家具公司企业网站源码,免费、轻量、功能齐全、易于定制,还具备SEO优势,完美解决了家具企业“建站难、成本高、效果差”的痛点。不管你是想快速搭建官方网站展示产品,还是想提升品牌形象、拓展市场,它都能满足需求。无需复杂操作,不用高额投入,就能拥有一款专业级的家具企业官网,助力企业在激烈的市场竞争中脱颖而出,强烈推荐给各位家具行业的创业者和企业负责人! -
开源免费的默笙工具箱,快速搭建专属工具站 一、基础信息速览:低成本建站,适配站长需求 大家好,我是字节曜的编辑寒烟似雪,对于想做工具站的站长朋友们来说,一款轻便、兼容且无使用限制的源码,能大大降低建站门槛——今天要分享的默笙工具箱源码,正是为这类站长量身打造的实用选择!它基于PHP+MYSQL开发,不管你是个人站长想试水工具站赛道,还是小团队计划搭建垂直工具平台,都能完美适配。 头图图片 这款源码体积仅31.41MB,稳定性经过实测表现可靠。运行环境兼容性极强,Apache或IIS服务器可直接部署,无需额外复杂配置;即便你用的是nginx服务器,也只需简单添加tp伪静态规则即可,对站长来说部署成本极低。最关键的是它完全开源免费,下载后可自由使用、修改,没有任何功能限制或隐藏收费,能帮站长省去一笔源码采购费用,特别适合预算有限的站长起步。 下载 下载地址:https://pan.quark.cn/s/12a4793e46b3 提取码:二、核心功能揭秘:30+工具直接填充,快速丰富站点内容 对工具站站长而言,站点能否吸引用户,核心在于工具的丰富度和实用性——默笙工具箱源码直接帮你解决了“内容填充”的大难题,集成30+常用工具,不用你从零开发,上线就能给用户提供有价值的功能。 工具覆盖场景超全面:既有开发者用户青睐的爆炸代码生成,也有大众高频需求的在线二维码制作,还有能提升站点趣味性的胜利纸牌游戏、在线整人工具,再加上音悦台视频解析、图片处理这类实用功能,兼顾了不同用户群体的需求。更重要的是,它不只是单纯的工具集合,还融入了娱乐和学习属性,内置在线游戏、音乐收听、视频解析功能,能提升用户停留时长和复访率,帮站长更好地运营站点,省去后续频繁开发新功能的麻烦。 三、个性化与运营优势:可定制+易管理,助力站长打造差异化站点 想在众多工具站中脱颖而出,个性化和便捷管理必不可少,这两点默笙工具箱源码都能满足站长需求。 个性化方面,支持站长自行上传专属工具,还能在线更新管理,不管你想做垂直领域的工具站(比如设计类、办公类),还是综合型工具平台,都能通过定制化功能打造差异化优势,避免同质化竞争。同时,源码自带两套设计精美的响应式模板,无需站长额外花钱请设计师,模板适配电脑、手机、平板等多种设备,能覆盖更多用户终端,提升站点用户体验。 管理层面更是省心,采用bt响应式后台框架,操作逻辑清晰,不管是修改站点首页内容、上架/下架工具,还是统计站点数据,上手都很快——就算是没有太多技术基础的新手站长,也能轻松驾驭,节省后期运营管理的时间和精力。 四、安装指南:几步搞定部署,新手站长也能快速上线 对站长来说,源码安装的便捷性直接影响建站效率,默笙工具箱源码的安装流程简单易懂,跟着步骤走,新手也能快速完成部署: 第一步,通过FTP工具将源码完整上传到你的服务器空间; 第二步,在浏览器中输入域名+“/install”路径(例如:www.xxx.com/install),进入安装页面; 第三步,环境配置重点说明:Apache或IIS服务器用户可直接跳过额外配置,nginx用户需将以下伪静态规则添加到配置文件中,添加后重启nginx服务即可,规则如下: location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }第四步,按照安装页面提示,填写数据库信息、设置管理员账号密码,完成后续配置,就能顺利上线你的工具站啦! 总结:想做工具站?这款开源源码值得站长闭眼冲 对想入局工具站赛道的站长朋友们来说,默笙工具箱源码简直是“省时、省力、省钱”的神器:开源免费降低建站成本,30+工具直接填充站点内容,可定制化支持差异化运营,响应式设计+便捷后台提升运营效率,简单安装流程让新手也能快速上线。不用从零开发功能,不用纠结设计模板,一款源码就能帮你快速搭建起实用又有竞争力的工具站,真心推荐给每一位想做工具站的站长! -
警惕!WindowsAdminCenter爆提权漏洞!普通用户点几下,就能拿到系统最高权限 前言 朋友们,我是字节曜的编辑寒烟似雪。咱平时用来管理服务器、维护电脑的Windows Admin Center(WAC),最近藏了个大隐患!微软刚确认的CVE-2025-64669漏洞,居然能让低权限用户“一步登天”——不用复杂操作,只要在有WAC的电脑上有点基础访问权,就能蹭到SYSTEM最高权限,偷数据、植后门都不在话下。这漏洞影响2.4.2.1及更早版本,不少企业的服务器、办公电脑还在裸奔,看完你肯定得赶紧去查自家设备! mjlcmbrm.png图片一、漏洞根源:一个“权限配置”的坑,成了黑客突破口 说起来这漏洞特“低级”但特致命——问题出在WAC的一个关键目录C:\ProgramData\WindowsAdminCenter上。按常理,这种管理工具的核心目录,应该只有管理员能改,但微软偏偏没设好权限,普通用户也能往里面写文件。 更糟的是,这个目录里跑的组件、进程,全是NETWORK SERVICE甚至SYSTEM级别的高权限!就像给了小偷一把能开银行金库的钥匙,还告诉人家“金库门没锁”——低权限用户往这目录里塞点恶意东西,高权限进程一执行,直接就能“借权”拿到系统最高控制权。 二、拆解攻击流程:两种简单操作,普通用户也能玩明白 安全研究员已经测出两条实实在在的攻击路径,全程不用写复杂代码,甚至连编程基础都不用有,普通人照着步骤来就能搞事,这才是最吓人的: 1. 蹭“扩展卸载”漏洞:塞个脚本就能提权 WAC有个扩展功能(比如装个监控插件、备份工具),卸载扩展时会干一件事:在C:\ProgramData\WindowsAdminCenter\Extensions目录下找“uninstall”文件夹,把里面所有PowerShell脚本(.ps1)拿出来,用高权限跑一遍。 黑客就钻了这个空子: 先在自己的低权限账号下,往这个“uninstall”文件夹里塞一个带签名的恶意脚本(网上能找到合法签名工具,甚至伪造签名也能蒙混); 然后随便找个理由触发扩展卸载——比如假装“插件用不了,卸载重装”,或者直接调用WAC的API触发卸载; 等WAC的高权限进程执行到这个恶意脚本,瞬间就能拿到SYSTEM权限。之前有测试的,脚本里写个“把管理员密码存到C盘根目录”,执行完真就能拿到密码! 2. 蹭“更新程序”漏洞:钻时间差换恶意DLL WAC的更新程序WindowsAdminCenterUpdater.exe也有毛病——它会从C:\ProgramData\WindowsAdminCenter\Updater目录里加载DLL文件(系统运行需要的小模块)。虽然微软要求DLL必须签名,但研究员发现了个“检查时间差”(TOCTOU)的漏洞: 第一步:WAC主进程先检查这个目录里的DLL,确认签名没问题; 第二步:等更新程序真正要加载DLL时,中间有个几毫秒的空窗期; 黑客就盯着这个空窗期,用工具实时监控——一旦发现更新程序要启动,立马把原来的合法DLL换成自己的恶意DLL; 等更新程序加载时,已经换成恶意DLL了,但签名检查早就做过了,直接就用高权限跑起来。 测试时,研究员就用这招,让恶意DLL在SYSTEM权限下创建了一个隐藏管理员账号,全程没弹任何警告,任务管理器里都看不到异常。 三、这漏洞为啥危险?企业、个人都躲不开 别觉得这只是“企业IT该操心的事”,现在不少个人用户也用WAC管理自己的Windows 11电脑(比如装个WAC远程管理家里的NAS、备用机),一旦中招,后果一样严重: 1. 企业:低权限员工能掀翻整个内网 比如公司里的实习生、前台,本来只能用自己的普通账号办公,要是利用这漏洞提权: 能删服务器日志,掩盖自己偷数据的痕迹; 能给OA系统、客户数据库植后门,让黑客远程控制; 甚至能篡改财务软件的数据,把转账账号换成自己的——之前某小公司就差点中招,IT助理用这漏洞改了报销系统的收款账号,还好财务对账时发现了。 2. 个人:电脑里的隐私全暴露 个人用户用WAC管理电脑的话,要是被别人拿到低权限账号(比如借电脑给朋友用): 能偷你浏览器里的密码、历史记录要留清白在人间哦; 能装远程控制软件,就算你拿回电脑,对方也能实时监控你干啥; 更狠的是植勒索软件,把你硬盘加密,要完赎金才解密。 而且这漏洞还特别难检测——所有操作都是借着WAC的合法进程跑的,杀毒软件看了都觉得“这是正常程序在干活”,不会报毒。 四、紧急防护建议:3步就能堵上漏洞,别等中招才动手 微软已经在2025年12月的“补丁星期二”更新里修复了这个漏洞,现在做防护其实很简单,关键是“别拖延”: 1. 第一步:立马更WAC到最新版 不管是企业服务器还是个人电脑,打开WAC后看右上角的版本号,只要低于2.4.2.2,赶紧更: 企业用户:通过组策略批量推送更新,或者去微软官网下载离线补丁(https://learn.microsoft.com/zh-cn/windows-server/manage/windows-admin-center/overview); 个人用户:直接点WAC里的“设置-更新”,自动下载安装,5分钟就能搞定。 2. 第二步:手动锁死危险目录权限 要是暂时没法更(比如企业服务器要等审批),先手动改目录权限应急: 找到C:\ProgramData\WindowsAdminCenter目录,右键“属性-安全”; 把“Users”(普通用户组)的权限改成“只读”,彻底禁止普通用户往里面写文件; 再检查子目录“Extensions”“Updater”,权限也照这个改,相当于先把“小偷能塞东西的门”焊死。 3. 第三步:监控异常操作 企业用户:用EDR(终端防护软件)监控这两个目录的文件变动,一旦发现普通用户往里面写.ps1脚本、.dll文件,立马报警; 个人用户:打开“事件查看器”,看“Windows日志-安全”,如果有“低权限用户执行高权限进程”的记录(比如事件ID 4688里,普通账号启动了powershell.exe且权限是SYSTEM),赶紧查电脑有没有被植入恶意文件。 结语:管理工具别当“免死金牌”,及时更新才是王道 这次的漏洞给所有人提了个醒:平时用来“保安全”的管理工具,自己也可能出安全问题。Windows Admin Center这种大家觉得“官方出品、肯定安全”的软件,照样会有权限配置的低级错误。 不管是企业IT还是个人用户,现在就去查WAC版本,能更就立马更,暂时不能更就锁权限——别等黑客先用上这漏洞,到时候丢了数据、被勒索,哭都来不及!