Gtk.CssProvider.load_from_data TypeError: Item 0: must be number, not str

Tho*_*ner 4 pygtk python-3.x gtk3

当我从终端运行我的 gtk 项目时出现这个错误python3 myapp.py,但在通过 Sublime-Text-3 的 python 构建系统启动我的应用程序时没有!多么奇怪。

TypeError: Item 0: Must be number, not str
Run Code Online (Sandbox Code Playgroud)

出错的代码本质上是:

color_scheme = {'fg_color':'#ffffff', 'bg_color': '#000000',}
css = """
    GtkLabel {
        color: %(fg_color)s;
        background: %(bg_color)s;
    }
"""

# ...

cssprovider = Gtk.CssProvider()
css_data = css % color_scheme
cssprovider.load_from_data(css_data)
Run Code Online (Sandbox Code Playgroud)

小智 6

正如其他答案(包括您的)所述, style_provider.load_from_data() 需要字节,而不是字符串。

您可以直接将 CSS 定义为字节流,而不是编码您的 unicode 字符串:

css = b"""
        #MyWindow {
            background-color: red;
        ...
    """
Run Code Online (Sandbox Code Playgroud)

(注意 b)


Tho*_*ner 3

我能够从谷歌中挖掘出这个: https://bugs.debian.org/cgi-bin/bugreport.cgi? bug=698459

\n\n
\n

乔瑟兰·穆埃特 [2013-01-19 11:55 +0100]:

\n\n
\n

Le vendredi 2013 年 1 月 18 日 \xc3\xa0 21:10 +0000,Tony Houghton a \xc3\xa9crit :

\n\n
\n

类型错误:项目 0:必须是数字或单字节字符串,而不是 str

\n
\n\n

好吧,如果 Python 想要一个字节字符串,请向其发送一个字节字符串,而不是 \n unicode 字符串。\n 也就是说,b"""blah blah blah"""。

\n
\n\n

确实,关门了。或者,如果您有一个(unicode)字符串,您也可以对其调用 .encode() 将其转换为字节数组。

\n\n

马丁

\n
\n\n

第一次尝试使用bytes(css_data) 没有成功,但是

\n\n
css_data.encode()\n
Run Code Online (Sandbox Code Playgroud)\n\n

成功了!

\n