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

时间:2014-03-27 17:01:53

标签: python url pyqt special-characters qtstylesheets

我们想在QtGui.QFrame对象上设置背景图像(在本例中为self)。 图像的路径在Windows 7上有一个名为“Björn”的Swedish Users目录。 问题是特殊字符'ö',在py。

中编码为'\ xf6'

在shell上测试:

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

我们想这样做:

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

但它不起作用。

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

任何想法,解决这个问题?

1 个答案:

答案 0 :(得分:1)

样式表有几个问题。

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

要使用未转义的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;}
    """)