PyQt:setStyleSheet中的特殊字符url()

1 投票
1 回答
614 浏览
提问于 2025-04-18 00:11

我们想在一个QtGui.QFrame对象上设置背景图片(这里指的是self)。这个图片的路径包含一个名为“Björn”的瑞典用户目录,位于Windows 7系统上。

问题在于这个特殊字符'ö',在Python中它被编码为'\xf6'。

在命令行上测试:

>>>"Björn"
'Bj\xf6rn'

我们想这样做:

self.setStyleSheet("""QFrame {background: url(c:\Users\Bj\xf6rn\image.png) center no-repeat;} """)

但是这样不行。

我们知道在没有“特殊字符”的其他目录中是可以正常工作的,但在我们的情况下,我们必须处理一个“瑞典”的目录。

有没有什么想法可以解决这个问题呢?

1 个回答

1

你的样式表有几个问题。

首先,路径中不能用反斜杠;你必须使用正斜杠。其次,当包含非 ASCII 字符时,应该加上引号。第三,你要么使用普通的、未转义的 Unicode 字符,要么使用CSS 转义语法。最后,如果你在用 Python 2,想要包含未转义的 Unicode 字符,就必须使用 Unicode 字符串(也就是 u"")。

要使用未转义的 Unicode 字符,可能需要为你的 Python 模块声明编码,这取决于你使用的 Python 版本。

对于 Python 2,使用 utf-8 编码:

# -*- coding: utf-8 -*-

self.setStyleSheet(u"""
    QFrame {background: url('c:/Users/Björn/image.png') center no-repeat;}
    """)

对于 Python 3,默认就是 utf-8,所以不需要声明编码:

self.setStyleSheet("""
    QFrame {background: url('c:/Users/Björn/image.png') center no-repeat;}
    """)

对于任一版本,使用 CSS 转义:

self.setStyleSheet("""
    QFrame {background: url('c:/Users/Bj\\0000F6rn/image.png') center no-repeat;}
    """)

撰写回答