我正在使用 PyQt5 在 Python 中编写 GUI 应用程序,主应用程序名为main_app.py
。尽管只是一个 Python 脚本,并file -i main_app.py
返回正确的 MIME 类型text/x-script.python
,但 Nautilus 中显示的图标不是 Python 脚本的图标,并且“属性”选项卡报告的 MIME 类型是text/x-qml
。
屏幕截图 1
更令人困惑的是,检查/etc/mime.types
文件时,没有text/x-qml
!的条目。屏幕截图 2
在对文件进行了一些操作后,我发现此行为实际上取决于文件的内容。我的第一个非注释行是
from custom_parser import Parser
import html
import json
from PyQt5 import Qt, QtCore
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
如果我删除所有 PyQt5 库的导入,Nautilus 会报告正确的图标和 MIME 类型。
最后一件可能很重要的事情:我有Qt 设计器之前安装在我的电脑上(通过sudo apt install qttools5-dev qttools5-dev-tools
),但随后以apt
同样的方式删除了它。我正在运行 Ubuntu 22.04.2 和 Python 3.10。
因此,我的问题是:如何防止 Nautilus 以这种方式更改 MIME 类型?我不需要支持这种额外的text/x-qml
MIME 类型,因此如果我可以从某个配置文件中删除它就可以了。
答案1
感谢@steeldriver 的评论和另一个答案我找到了一个解决方案。显然 Qt Designer 没有正确卸载自身,并text/x-qml
在文件中留下了其 MIME 类型的规范/usr/share/mime/packages/freedesktop.org.xml
:
<mime-type type="text/x-qml">
<comment>Qt Markup Language file</comment>
...
<magic priority="80">
<match type="string" value="/bin/env qml" offset="2:16"/>
<match type="string" value="import Qt" offset="0:3000">
<match type="string" value="{" offset="9:3009"/>
</match>
<match type="string" value="import Qml" offset="0:3000">
<match type="string" value="{" offset="9:3009"/>
</match>
</magic>
<glob pattern="*.qml"/>
<glob pattern="*.qmltypes"/>
<glob pattern="*.qmlproject"/>
</mime-type>
(请注意该<match type="string" value="import Qt" offset="0:3000">
行,它可能是用于标识我的脚本的行,因为text/x-qml
它与我的导入语句的第 4 行相匹配)。我只是从文件中删除了该条目,重新编译了 MIME 数据库,sudo update-mime-database -V /usr/share/
然后一切都恢复正常。