Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pycairo:如何正确地实例化cairo.XlibSurface()?_Python_Cairo_Xlib_Pycairo - Fatal编程技术网

Python Pycairo:如何正确地实例化cairo.XlibSurface()?

Python Pycairo:如何正确地实例化cairo.XlibSurface()?,python,cairo,xlib,pycairo,Python,Cairo,Xlib,Pycairo,我试图用Pycairo创建小部件来监视系统,比如Conky。 我试图直接在X上绘制,使用带Xlib的Cairo曲面 当我尝试实例化cairo.XlibSurface()类时,返回一个错误: TypeError: The XlibSurface type cannot be directly instantiated 我的简单代码: import cairo surface = cairo.XlibSurface() 如何正确地引用cairo.XlibSurface() 提前感谢[不是完整的答

我试图用Pycairo创建小部件来监视系统,比如Conky。 我试图直接在X上绘制,使用带Xlib的Cairo曲面

当我尝试实例化cairo.XlibSurface()类时,返回一个错误:

TypeError: The XlibSurface type cannot be directly instantiated
我的简单代码:

import cairo
surface = cairo.XlibSurface()
如何正确地引用cairo.XlibSurface()

提前感谢

[不是完整的答案] 我有足够的片段,这可能是更有用的回答,而不是作为一个评论。很抱歉,我没有弄清这件事的真相

它本身只提到它可以通过对GTK的某些调用进行实例化——我不确定这是否只是对GTK2的旧绑定。我可以找到一个片段来使用GTK+3获得Cairo上下文,但是如果不使用ctypes,从Cairo上下文返回到它使用的表面似乎是不可行的

因此,您基本上需要使用Python ctypes调用,并找到一种使用ctypes从上述函数返回的指针创建Python cairo.XlibSurface实例的方法。这就是您可能必须在pygtk遗留代码库中用C找到的“缺少的链接”,并在Python代码中用ctypes进行复制

首先,对于
cairo\u xlib\u surface\u create
调用所需的参数,您可能可以使用-下面的代码片段为您提供一个窗口GID和用于X显示和窗口的Python包装:

从Xlib导入X,显示
pd=display.display()
win=pd.screen().root.create_窗口(0,0,640,480,0,pd.screen().root_深度,X.InputOutput,X.CopyFromParent)
win.map()
pd.sync()
xid=xx.\uuuuu资源
[不是完整的答案] 我有足够的片段,这可能是更有用的回答,而不是作为一个评论。很抱歉,我没有弄清这件事的真相

它本身只提到它可以通过对GTK的某些调用进行实例化——我不确定这是否只是对GTK2的旧绑定。我可以找到一个片段来使用GTK+3获得Cairo上下文,但是如果不使用ctypes,从Cairo上下文返回到它使用的表面似乎是不可行的

因此,您基本上需要使用Python ctypes调用,并找到一种使用ctypes从上述函数返回的指针创建Python cairo.XlibSurface实例的方法。这就是您可能必须在pygtk遗留代码库中用C找到的“缺少的链接”,并在Python代码中用ctypes进行复制

首先,对于
cairo\u xlib\u surface\u create
调用所需的参数,您可能可以使用-下面的代码片段为您提供一个窗口GID和用于X显示和窗口的Python包装:

从Xlib导入X,显示
pd=display.display()
win=pd.screen().root.create_窗口(0,0,640,480,0,pd.screen().root_深度,X.InputOutput,X.CopyFromParent)
win.map()
pd.sync()
xid=xx.\uuuuu资源
没有解决这个问题:如何将Pycairo与Xlib结合使用,而是一个使用Gtk和Pycairo的优雅替代方案

如何将Pycairo与Xlib结合使用的奥秘还在继续

将Gtk窗口与
Gdk.WindowTypeHint.DESKTOP
一起使用,获得优雅的输出

导入gi
gi.require\u版本({
“Gdk”:“3.0”,
“Gtk”:“3.0”,
“Wnck”:“3.0”,
“商品及服务税”:“1.0”,
“AppIndicator3”:“0.1”,
})
从gi.repository导入Gtk、Gdk
进口开罗
类示例(Gtk.Window):
定义初始化(自):
super(例如,self)。\uuuuu init\uuuuuuuu()
self.tran_setup()
self.init_ui()
def初始用户界面(自身):
自连接(“绘制”,自绘制)
#self.set_标题(“透明窗口”)
自我调整大小(300250)
自我设置位置(Gtk.WindowPosition.NONE)
自我移动(0,40)
self.connect(“删除事件”,Gtk.main_退出)
#魔法就在这里
self.set\u type\u提示(Gdk.WindowTypeHint.DESKTOP)
self.show_all()
def传输设置(自):
自设置应用程序可绘制(真)
screen=self.get_screen()
#打印(self.get\u type\u hint())
visual=screen.get_rgba_visual()
如果是可视的!=无和屏幕。是否已合成()
自设置_视觉(视觉)
图纸上的def(自身、wid、cr):
cr.set_源_rgba(0.2,0.2,0.2,0.4)
cr.set_运算符(cairo.operator_源)
cr.油漆()
cr.set_源_rgb(0.6,0.6,0.6)
cr矩形(20,20,120,80)
cr.fill()
自绘制(cr)
def抽取(自,cr):
cr.set_源_rgb(0、256、256)
cr矩形(180,20,80,80)
cr.fill()
def main():
app=示例()
Gtk.main()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
输出:

没有解决这个问题:如何将Pycairo与Xlib结合使用,而是一个使用Gtk和Pycairo的优雅替代方案

如何将Pycairo与Xlib结合使用的奥秘还在继续

将Gtk窗口与
Gdk.WindowTypeHint.DESKTOP
一起使用,获得优雅的输出

导入gi
gi.require\u版本({
“Gdk”:“3.0”,
“Gtk”:“3.0”,
“Wnck”:“3.0”,
“商品及服务税”:“1.0”,
“AppIndicator3”:“0.1”,
})
从gi.repository导入Gtk、Gdk
进口开罗
类示例(Gtk.Window):
定义初始化(自):
super(例如,self)。\uuuuu init\uuuuuuuu()
self.tran_setup()
self.init_ui()
def初始用户界面(自身):
自连接(“绘制”,自绘制)
#self.set_标题(“透明窗口”)
自我调整大小(300250)
自我设置位置(Gtk.WindowPosition.NONE)
自我移动(0,40)
self.connect(“删除事件”,Gtk.main_退出)
#魔法就在这里
self.set\u type\u提示(Gdk.WindowTypeHint.DESKTOP)
self.show_all()
def传输设置(自):
自设置应用程序可绘制(真)
screen=self.get_screen()
#打印(self.get\u type\u hint())
visual=screen.get_rgba_visual()
如果是可视的!=无和屏幕。是否已合成()
自设置_视觉(视觉)
图纸上的def(自身、wid、cr):