PyQt:setStyleSheet中的特殊字符url()
我们想在一个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;}
""")