You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成系统发育树时遇TypeError:setDotsPerMeterX参数类型错误

解决方法

1. 修复ete3库的类型错误

报错根源是ete3内部代码调用Qt的setDotsPerMeterX时传入了浮点数,但该方法要求整数参数。找到你的Python环境中ete3/treeview/main.py文件(路径为/home/xxx/.local/lib/python3.10/site-packages/ete3/treeview/main.py),定位到第754行附近的代码:

ii.setDotsPerMeterX(dpi / 0.0254) # Convert inches to meters
ii.setDotsPerMeterY(dpi / 0.0254) # Convert inches to meters

把这两行修改为:

ii.setDotsPerMeterX(int(dpi / 0.0254)) # Convert inches to meters
ii.setDotsPerMeterY(int(dpi / 0.0254)) # Convert inches to meters

2. 修正代码中的文件名不一致问题

你代码里Tree对象基于MK.fasta.treefile生成,但调用t.render时写的是rbcL_tree.png,和后续处理的MK_tree.png不匹配,会导致文件找不到。将这一行改成:

t.render("MK_tree.png", w=1000, h=800, units="px", tree_style=ts, dpi=int(dpi))

3. 移除多余的DPI调整代码

你已经用PIL完成了图片尺寸缩放和DPI设置,后面用QImage重复修改的代码完全多余,还可能引发额外问题,直接删除以下段落:

# Change the DPI of the image
ii = QImage()
ii.load("MK_tree.png")
ii.setDotsPerMeterX(int(dpi / 0.0254)) # Convert inches to meters
ii.setDotsPerMeterY(int(dpi / 0.0254)) # Convert inches to meters
ii.save("MK_tree.png")

可选方案:不修改库代码

如果不想改动ete3的源码,可以直接不给t.render传dpi参数,只靠PIL来调整最终图片的DPI和尺寸。修改后的渲染调用:

t.render("MK_tree.png", w=1000, h=800, units="px", tree_style=ts)

内容的提问来源于stack exchange,提问作者shawn_smith_kaviedes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:57:01