2014-03-27 65 views
1

我们希望在QtGui.QFrame对象(本例中为self)上设置背景图像。 图像的路径在Windows 7上有一个名为“Björn”的瑞典用户目录。 问题是特殊字符'ö',它在py中编码为'\ xf6'。上壳PyQt:setStyleSheet中的特殊字符url()

测试:

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

我们想做到这一点:

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

但它不工作。

我们知道它可以在没有“特殊字符”的另一个目录下工作,但在我们的例子中,我们必须处理一个“瑞典语”目录。

任何想法,解决这个?

回答

1

样式表有几个错误。

首先,您不能在路径中使用反斜线;你必须使用正斜杠。其次,包含非ASCII字符时应使用引号。第三,你应该使用正常的,未转义的unicode字符,或者css escaping syntax。最后,如果您使用的是python2,如果您想包含未转义的unicode字符,则必须使用unicode字符串(即u"")。

要使用未转义的unicode字符,您可能需要为您的python模块声明一种编码,具体取决于您使用的python版本。

对于python2,具有UTF-8编码:

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

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

对于python3,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;} 
    """)