如何重定向Gtk.窗口()调用python?

2024-04-26 04:40:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在python中创建一个Gtk.Window()。因为我使用的主题,我得到了一些警告,比如:

Gtk-WARNING **: Theme parsing error: other-applications.css:35:21: 'px' is not a valid color name

但没关系。 我只想在命令行输出中隐藏这些信息。在

我尝试过但没有奏效的是:

^{pr2}$

问题是“hello world”没有打印出来(如预期),但是上面提到的警告仍然出现。在

有什么建议吗?在


Tags: 警告gtk主题isnoterrorwindowtheme
2条回答

@马特亚斯。在

这个错误是由旧版本的Gtk3引起的,很可能发生在debianwheezzy或ubuntu12.04中。 在Gtk3.4及更早版本中,px不支持作为一个单元。在

解决这个问题的一个简单方法是创建两个css文件,一个使用px,另一个不带px。在python中将样式文件作为CssProvider加载时,请检查当前gtk3版本,如下所示:

if Gtk.MINOR_VERSION < 6:
    # load other-applications-3.4.css
else:
    # load other-applications.css

我以前在我的项目中遇到过这种情况。在

重定向sys.stdoutsys.stderr只影响Python代码;在您的例子中,您看到的错误来自Gtk(在较低级别)。在

必须使用原始文件描述符重定向。 看这个:How do I prevent a C shared library to print on stdout in python?

基本上这里有一些代码可以在C代码的最底层重定向stdout, 但对于Python代码则不适用(Dietrich Epp给出了答案):

def redirect_stdout():
    # Redirecting stdout
    sys.stdout.flush() # < - important when redirecting to files
    newstdout = os.dup(1)
    devnull = os.open(os.devnull, os.O_WRONLY)
    os.dup2(devnull, 1)
    os.close(devnull)
    sys.stdout = os.fdopen(newstdout, 'w')

相关问题 更多 >