我刚刚通过pip安装了retext。我必须为它下载图标,但我发现它不起作用(菜单上没有图标),除非我运行" retext"在翻版文件夹中。
我试图解决它但我的python技能不是很强。
目前,我强制icon_path拥有我想要的路径。
#icon_path = 'icons/'
icon_path = '/usr/local/lib/python3.5/site-packages/retext/icons/'
有人可以告诉我这条线是如何工作的吗?
datadirs = [join(d, 'retext') for d in datadirs]
感谢。
import sys
import markups
import markups.common
from os.path import dirname, exists, join
from PyQt5.QtCore import QByteArray, QLocale, QSettings, QStandardPaths
from PyQt5.QtGui import QFont
app_version = "6.0.1"
settings = QSettings('ReText project', 'ReText')
if not str(settings.fileName()).endswith('.conf'):
# We are on Windows probably
settings = QSettings(QSettings.IniFormat, QSettings.UserScope,
'ReText project', 'ReText')
datadirs = QStandardPaths.standardLocations(QStandardPaths.GenericDataLocation)
datadirs = [join(d, 'retext') for d in datadirs]
if sys.platform == "win32":
# Windows compatibility: Add "PythonXXX\share\" path
datadirs.append(join(dirname(sys.executable), 'share', 'retext'))
if '__file__' in locals():
datadirs = [dirname(dirname(__file__))] + datadirs
#icon_path = 'icons/'
icon_path = '/usr/local/lib/python3.5/site-packages/retext/icons/'
for dir in datadirs:
if exists(join(dir, 'icons')):
icon_path = join(dir, 'icons/')
break
答案 0 :(得分:1)
os.path.join(path, *paths)
智能地加入一个或多个路径组件。返回值是路径和
*paths
的任何成员的串联,在除了最后一个之外的每个非空部分之后只有一个目录分隔符(os.sep
),这意味着结果将仅在分隔符中结束最后一部分是空的。如果组件是绝对路径,则抛弃所有先前的组件,并从绝对路径组件继续连接。
在此导入:
from os.path import dirname, exists, join
所以,有问题的一行:
datadirs = [join(d, 'retext') for d in datadirs]
[
... ]
是一个列表理解,用于构建应用于join(d, 'retext')
列表中每个目录的datadirs
结果列表。
所以,如果包含datadirs
:
['/usr/local/test', '/usr/local/testing', '/usr/local/tester']
然后:
[join(d, 'retext') for d in datadirs]
会产生:
['/usr/local/test/retext', '/usr/local/testing/retext', '/usr/local/tester/retext']
设置问题:
icon_path = '/usr/local/lib/python3.5/site-packages/retext/icons/'
是否在for
循环中被覆盖,因此除非找不到合适的路径,否则它将被覆盖。