普通视图
鸿蒙ArkUI如何使用RGB、十六进制等设置颜色值?
C# 正则表达式(3):分组与捕获——从子串提取到命名分组
从一则内存快照看iframe泄漏:活跃与Detached状态的回收差异
前端一行代码生成数千页PDF,dompdf.js新增分页功能| 掘金一周 12.25
大前端框架汇总/产品交互参考UE
🎉TinyVue v3.27.0 正式发布:增加 Space 新组件,ColorPicker 组件支持线性渐变
漏洞复现指南:利用 phpinfo() 绕过 HttpOnly Cookie 保护
30秒搞懂ERC-2981:NFT版税的终极解决方案!
Node.js第一课:实现简易的命令行任务管理器
🔥🔥高效易用的 Vue3 公告滚动组件:打造丝滑的内容滚动体验(附源码)
iOS 和 HarmonyOS 兼容笔记
Flutter 开发的极简风格聊天界面
前端处理用户离开当前页面的方案及对比解析
基于 node-rtsp-stream 的 Web 直播方案详解
pyenv 安装的 python 版本缺少 tkinter 报错 import _tkinter # If this fails your Python xxx
一、简介
-
使用
tkinter生成页面的时候报错:Traceback (most recent call last): File "/Users/xxx/Desktop/Project/python/duanju_python_pczs/gui.py", line 20, in <module> import tkinter as tk File "/Users/xxx/.pyenv/versions/3.11.0/lib/python3.11/tkinter/__init__.py", line 38, in <module> import _tkinter # If this fails your Python may not be configured for Tk ^^^^^^^^^^^^^^^ ImportError: dlopen(/Users/xxx/.pyenv/versions/3.11.0/lib/python3.11/lib-dynload/_tkinter.cpython-311-darwin.so, 0x0002): Library not loaded: /opt/homebrew/opt/tcl-tk/lib/libtk8.6.dylib Referenced from: <E1D3F9E7-858B-3AC7-9D7B-9827F56D3FEF> /Users/xxx/.pyenv/versions/3.11.0/lib/python3.11/lib-dynload/_tkinter.cpython-311-darwin.so Reason: tried: '/opt/homebrew/opt/tcl-tk/lib/libtk8.6.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/tcl-tk/lib/libtk8.6.dylib' (no such file), '/opt/homebrew/opt/tcl-tk/lib/libtk8.6.dylib' (no such file), '/opt/homebrew/Cellar/tcl-tk/9.0.2/lib/libtk8.6.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/tcl-tk/9.0.2/lib/libtk8.6.dylib' (no such file), '/opt/homebrew/Cellar/tcl-tk/9.0.2/lib/libtk8.6.dylib' (no such file) -
原因是:
当前的
Python是用pyenv装的,但系统里没有它期望版本的tcl-tk (8.6),只装了tcl-tk 9.x,导致_tkinter动态库加载失败。
二、Mac 解决方案
-
使用
brew搜索$ brew search tcl-tk并安装brew install tcl-tk@8 -
配置环境变量
$ open ~/.zshrc不推荐是
/opt/homebrew/Cellar/tcl-tk@8/目录下的,推荐使用/opt/homebrew/opt/tcl-tk@8/目录下的:export PATH="/opt/homebrew/opt/tcl-tk@8/bin:$PATH" export LDFLAGS="-L/opt/homebrew/opt/tcl-tk@8/lib" export CPPFLAGS="-I/opt/homebrew/opt/tcl-tk@8/include" export PKG_CONFIG_PATH="/opt/homebrew/opt/tcl-tk@8/lib/pkgconfig"报错后执行:
$ source ~/.zshrc -
然后需要重装
python版本,⚠️ 不重装 Python 是没用的,_tkinter是编译期决定的$ pyenv uninstall 3.11.0 $ pyenv install 3.11.0当然也有临时补丁方案,配置的环境变量不同,但是不能一劳永逸。
-
重新安装好后,重新运行项目即可。

二、Windows 解决方案
- 暂时没遇到,遇到再补充....
Chrome 插件开发科普:从零开始打造你的浏览器小工具
你有没有想过,为什么 Chrome 浏览器那么强大?很大程度上是因为它的“扩展程序”(俗称 Chrome 插件)。这些小工具可以帮你屏蔽广告、翻译网页、管理密码,甚至自动填写表单。它们就像浏览器的“超级英雄披风”,让普通浏览器变得无所不能。
其实,开发一个 Chrome 插件并不难!它本质上就是用你熟悉的 Web 技术(HTML、CSS、JavaScript)构建的小程序,加上一些 Chrome 专属的 API,就能实现神奇的功能。目前,Chrome 插件的主流标准是 Manifest V3(简称 MV3),这是 Google 从 2023 年起强制推行的版本,比老的 V2 更安全、更高效。
什么是 Chrome 插件?为什么值得学?
Chrome 插件(官方叫 Extensions)是一个压缩包,里面包含配置文件、脚本和资源文件。它可以:
- 修改网页内容(比如自动高亮关键词)。
- 添加浏览器按钮(点击弹出小窗口)。
- 在后台运行(监听事件、存储数据)。
- 与网页互动(注入脚本)。
学习开发插件的好处:
- 门槛低:只需会前端基础。
- 实用性强:解决个人痛点,或分享给别人。
- 潜力大:上传到 Chrome 网上应用店,就能被全球用户安装。
插件的核心结构
一个最简单的插件只需要一个文件夹,里面放几个文件:
-
manifest.json:插件的“身份证”,必须放在根目录。它定义插件名称、版本、权限和功能。基本内容大概这样:
{ "manifest_version": 3, "name": "我的第一个插件", "version": "1.0", "description": "一个简单的 Hello World 插件", "action": { "default_popup": "popup.html", "default_icon": "icon.png" }, "permissions": ["storage", "activeTab"] } -
popup.html:点击插件图标时弹出的小窗口界面。弹出窗口(popup)界面。你可以用 HTML + CSS 随意设计。
-
其他常见文件:
- background.js(服务工作者):后台脚本,处理事件。
- content.js:注入到网页的脚本,能直接操作页面 DOM。
- icon.png:插件图标(推荐 128x128 像素)。
如何从零开始开发一个插件?
-
创建文件夹:新建一个空文件夹,比如叫
my-extension。 -
写 manifest.json:复制上面的示例。
-
添加 popup.html:
<!DOCTYPE html> <html> <body> <h1>Hello World!</h1> <script src="popup.js"></script> </body> </html> -
加载测试:
- 打开 Chrome,输入
chrome://extensions/。 - 开启右上角“开发者模式”。
- 点击“加载已解压的扩展程序”,选择你的文件夹。
- 刷新页面,插件图标就出现在工具栏了!点击试试。
- 打开 Chrome,输入
-
调试:修改代码后,在扩展页面点击“重新加载”。用开发者工具(F12)查看 console 日志。
进阶功能举例
-
改变网页背景:用 content script 注入 JS 修改
document.body.style.backgroundColor。 -
存储数据:用
chrome.storageAPI 保存用户设置。 -
通信:popup 和 background 用
chrome.runtime.sendMessage互相发消息。
官方推荐的入门教程:从一个 “Hello World” 开始,逐步添加功能(参考 Chrome 官方文档)。
发布你的插件
开发好了?打包成 .zip,注册 Chrome Web Store 开发者账号(需付一次性 5 美元),上传审核,就能上架了!
结语
Chrome 插件开发就像搭积木:简单部件组合出强大功能。很多人从一个“小痒点”开始,比如“自动跳过视频广告”,最后开发出热门插件。感兴趣的话,从官方文档起步(developer.chrome.com/docs/extens…
动手试试吧,你的第一个插件可能就藏在下一个灵感里!