DrawingArea无法获取XID

2023-12-01

我有以下 Python 2.7/PyGObject 3.0/PyGST 0.10 模块:

from gi.repository import Gtk, Gdk, GdkPixbuf
import pango
import pygst
pygst.require('0.10')
import gst
import Trailcrest
import os, sys
import cairo
from math import pi

class Video:

    def __init__(self):

        def on_message(bus, message): 
            if message.type == gst.MESSAGE_EOS: 
                # End of Stream 
                player.seek(1.0, gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH, gst.SEEK_TYPE_SET, 5000000000, gst.SEEK_TYPE_NONE, 6000000000)
            elif message.type == gst.MESSAGE_ERROR: 
                player.set_state(gst.STATE_NULL) 
                (err, debug) = message.parse_error() 
                print "Error: %s" % err, debug

        def on_sync_message(bus, message):
            if message.structure is None:
                return False
            if message.structure.get_name() == "prepare-xwindow-id":
                Gdk.threads_enter()
                print "Run before"
                Gdk.Display.get_default().sync()
                print "Run after"
                win_id = videowidget.window.xid
                imagesink = message.src
                imagesink.set_property("force-aspect-ratio", True)
                imagesink.set_xwindow_id(win_id)
                Gtk.gdk.threads_leave()

        def click_me(event, data=None):
            player.seek(1.0, gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH, gst.SEEK_TYPE_SET, 5000000000, gst.SEEK_TYPE_NONE, 6000000000)

        win = Gtk.Window()
        win.set_resizable(False)
        win.set_decorated(False)
        win.set_position(Gtk.WindowPosition.CENTER)

        fixed = Gtk.Fixed()
        win.add(fixed)
        fixed.show()

        videowidget = Gtk.DrawingArea()
        fixed.put(videowidget, 0, 0)
        videowidget.set_size_request(640, 480)
        videowidget.show()

        # Setup GStreamer 
        player = gst.element_factory_make("playbin", "MultimediaPlayer")
        bus = player.get_bus() 
        bus.add_signal_watch() 
        bus.enable_sync_message_emission() 
        #used to get messages that GStreamer emits 
        bus.connect("message", on_message) 
        #used for connecting video to your application 
        bus.connect("sync-message::element", on_sync_message)
        player.set_property("uri", "file://" + os.getcwd() + "/VID/BGA-HABT-001.ogv")
        player.set_state(gst.STATE_PLAYING)

        win.show()

def main():
    Gdk.threads_enter()
    Gtk.main()
    return 0

if __name__ == "__main__":
    Video()
    main()

我总是收到此错误,并且视频在新窗口而不是现有窗口中打开。

回溯(最近一次调用最后一次):文件“video.py”,第 32 行,位于 同步消息 win_id = videowidget.window.xid AttributeError:“DrawingArea”对象没有属性“window”

如何解决此问题,以便视频显示在我创建的窗口中,而不是新窗口中?

顺便说一下,这个问题是在我从 PyGTK 2.24 切换到 PyGObject 3.0 后才开始出现的。


(转载自GNOME PyGObject 3 错误报告 663360。答案归功于 Timo Vanwynsberghe)。

有几点需要注意: - 必须先实现绘图区域,然后才能获取其 GdkWindow - 显然,你无法直接获取窗口属性 - xid方法需要导入GdkX11

考虑到这一点,这是一个最小的工作示例:

from gi.repository import GdkX11, Gtk

class App:
    def __init__(self):
        win = Gtk.Window()
        win.resize(400, 400)
        win.connect('delete-event', Gtk.main_quit)

        da = Gtk.DrawingArea()
        win.add(da)
        win.show_all()

        print da.get_property('window').get_xid()

if __name__ == "__main__":
    App()
    Gtk.main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DrawingArea无法获取XID 的相关文章

  • Python Pandas 滚动聚合一列列表

    我有一个简单的数据框 df 和一列列表lists 我想根据以下内容生成一个附加列lists The df好像 import pandas as pd lists 1 1 2 1 2 3 3 2 9 7 9 4 2 7 3 5 create
  • 如何把父母和孩子联系起来?

    有两个简单的类 一个只有parent属性 并且两者兼而有之parent and children属性 这意味着同时具备两者的人parent and children继承自唯一的parent 这是只有parent属性 我们就这样称呼它吧Chi
  • 如何替换Python字符串中的正确字母

    任务是 您的任务是纠正数字化文本中的错误 您只需处理以下错误 S 被误解为 5 O 被误解为 0 I 被误解为 1 我的代码 def correct string for i in string if 5 in string string
  • 从内存地址创建python对象(使用gi.repository)

    有时我需要调用仅存在于 C 中的 gtk gobject 函数 但返回一个具有 python 包装器的对象 之前我使用过基于 ctypes 的解决方案 效果很好 现在我从 PyGtk import gtk 切换到 GObject intro
  • 使用 Python 和 lmfit 拟合复杂模型?

    我想适合椭偏仪 http en wikipedia org wiki Ellipsometry使用 LMFit 将数据转换为复杂模型 两个测量参数 psi and delta 是复杂函数中的变量rho 我可以尝试将问题分离为实部和虚部共享参
  • Python 内置对象的 __enter__() 和 __exit__() 在哪里定义?

    我读到每次使用 with 时都会调用该对象的 enter 和 exit 方法 我知道对于用户定义的对象 您可以自己定义这些方法 但我不明白这对于 打开 等内置对象 函数甚至测试用例是如何工作的 这段代码按预期工作 我假设它使用 exit 关
  • 使用 Pandas 从 csv 文件读取标题信息

    我有一个包含 14 行标题的数据文件 在标头中 有经纬度坐标和时间的元数据 我目前正在使用 pandas read csv filename delimiter header 14 读取文件 但这只是获取数据 我似乎无法获取元数据 有人知道
  • 为什么需要设置WORKON_HOME环境变量?

    我已经有一段时间没有使用 python 虚拟环境了 但我也安装了虚拟环境包装器 我的问题是 在文档页面中它说要这样做 export WORKON HOME Envs mkdir p WORKON HOME source usr local
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • Python在没有pandas的情况下解码excel表

    我正在尝试在 python 中读取 excel 文件而不使用pandas or xlrd 我一直在尝试将结果转换为bytes to utf 8没有任何成功 xls 文件中的数据 colA colB colC spc 1D0 20190705
  • pandas groupby 操作缺少数据

    在 pandas 数据框中 我有一列如下所示 0 M 1 E 2 L 3 M 1 4 M 2 5 M 3 6 E 1 7 E 2 8 E 3 9 E 4 10 L 1 11 L 2 12 M 1 a 13 M 1 b 14 M 1 c 15
  • 如何通过selenium中弹出的身份验证?

    我正在尝试使用带有 Selenium 的 Python 脚本加载需要身份验证的网页 options webdriver ChromeOptions prefs download default directory r download de
  • 获取多个同名请求参数

    我的问题是给定的代码 from flask import Flask request app Flask name app route def hello return str request values get param None a
  • 根据标点符号列表替换数据框中的标点符号[重复]

    这个问题在这里已经有答案了 使用 Canopy 和 Pandas 我有数据框 a 其定义如下 a pd read csv text txt df pd DataFrame a df columns test test txt 是一个单列文件
  • 如何检测一个二维数组是否在另一个二维数组内?

    因此 在堆栈溢出成员的帮助下 我得到了以下代码 data needle s which is a png image base64 code goes here decoded data decode base64 f cStringIO
  • 类返回语句不打印任何输出

    我正在学习课程 但遇到了问题return语句 它是语句吗 我希望如此 程序什么也没有打印出来 它只是结束而不做任何事情 class className def createName self name self name name def
  • tf.print() vs Python print vs tensor.eval()

    看来在Tensorflow中 至少有三种方法可以打印出张量的值 我一直在读here https www freecodecamp org news debugging tensorflow a starter e6668ce72617 an
  • SQLAlchemy 与 count、group_by 和 order_by 使用 ORM

    我有几个函数需要使用 count group by 和 order by 进行一对多连接 我使用 sqlalchemy select 函数生成一个查询 该查询将返回一组 id 然后我对其进行迭代以对各个记录执行 ORM 选择 我想知道是否有
  • Chrome 驱动程序和 Chromium 二进制文件无法在 aws lambda 上运行

    我陷入了一个问题 我需要在 AWS lambda 上做一些抓取工作 所以我按照下面提到的博客及其代码库作为起点 这非常有帮助 并且在运行时环境 Python 3 6 的 AWS lambda 上对我来说工作得很好 https manivan

随机推荐

  • xs:key,为什么当键值不是键引用的成员时验证会通过?

    我有兴趣在我的 Xsd 中定义一个关键约束 据我了解 使用xs key应该将使用的值限制为引用值列表的成员 假设我们使用样本 Xsd
  • Scala:有没有办法像在 Java 中一样使用 PriorityQueue?

    我有一个类 我想在 scala collection mutable PriorityQueue 中使用 但我不想仅出于此目的将其设为 Ordered A 我不认为我想要使用的 PriorityQueue 排序是类的自然排序 class M
  • 为什么STL容器没有虚拟析构函数?

    有谁知道为什么STL容器没有虚拟析构函数 据我所知 唯一的好处是 它通过一个指针 指向虚拟方法表 减少实例的大小 并且 它使破坏和建设速度更快一些 缺点是以通常的方式对容器进行子类化是不安全的 我的问题可以重新表述的另一种方式是 为什么 S
  • 获取列类型的SQL语句

    有没有可以返回表中列的类型的SQL语句 In ISO SQL i e most RDBMS today you can use the INFORMATION SCHEMA COLUMNS view which SQL Server sup
  • Python argv 采用通配符路径

    我运行我的脚本doc1 png作为第一个参数 但它被转换为doc1 image1 png 我怎样才能让Python看到确切的参数 img list print sys argv 1 x sys argv 1 img list img for
  • 调用方法后如何在标准输出中写入(自动执行通知系统(Iphone))

    我正在尝试使用自动通知系统 Iphone https github com simonwhitaker PyAPNs 当您想要发送通知时 您可以调用 apns gateway server send notification key Pay
  • bluebirdjs 承诺包裹在 for 循环中

    我有很多函数用于向我的服务提供数据 我想循环遍历它们中的每一个 并在其中一个返回所需结果时立即停止 如果第一个有效 那很好 如果有异常或数据无效 我想转到下一个 依此类推 我怎样才能实现这个目标 我有以下代码 handleData func
  • Facebook“赞”按钮回调

    我对实现 facebook 喜欢 按钮感兴趣 但我想知道哪些用户正在单击此按钮 以便我可以从中获取一些有用的信息 据我所知 Facebook 让我们对谁在点击什么一无所知 有人知道如何跟踪哪个用户点击了特定产品的 喜欢 按钮吗 更新 赞 按
  • 如何将对象存储在 firebase cloud function RAM 中?

    我的应用程序需要在处理用户的请求之前构建几个大型哈希图 理想情况下 我想将这些哈希图存储在机器的内存中 这意味着它永远不需要进行任何昂贵的处理 并且可以快速处理任何传入的请求 但这对于 Firebase 不起作用 因为用户有可能触发一个新实
  • 将运行 EXE 的当前 Windows 用户替换为另一个用户

    假设我构建了一个从网络文件夹读取文件的 Windows 应用程序 网络折叠限制只有一个用户 fooUser 的访问 该应用程序安装在网络上的多台计算机上 我需要将当前用户替换为 fooUser 以便能够通过代码访问网络文件夹上的文件 这是一
  • 如何以字幕方式输出字符串?

    我希望能够输入一个字符串 带空格 并将其显示为移动符号 例如 Input Hello World 5 This signifies the number of characters the sign can hold Output Sign
  • arr.sort(key=lambda x: (x[0],-x[1])) 是什么意思?

    gt gt gt arr 4 5 4 6 6 7 2 3 1 1 gt gt gt arr sort key lambda x x 0 statement 1 gt gt gt arr 1 1 2 3 4 5 4 6 6 7 gt gt g
  • CSS 在背景图像上模糊,但在内容上不模糊 [重复]

    这个问题在这里已经有答案了 I did 这个例子 我试图模糊背景图像 但主要内容也模糊了 span 如何在不模糊内容的情况下模糊背景 jsfiddle blur bgimage overflow hidden margin 0 text a
  • 如何用mongoosastic+AJAX进行即时搜索?

    我已经成功配置了 mongoosastic 我尝试搜索并且工作正常 但是当涉及到前端时我不太确定如何实现这一点 我尝试了很多方法但无法想出一个好的解决方案 这是代码 For the Search API router post api se
  • 从 VBA 执行 SQL Server 存储过程并检索所有消息和结果集

    我希望能够从 MS Access VBA 执行 SQL Server 存储过程 这样我就可以读取 1 所有结果结果集 而不仅仅是第一个结果集 2 由 PRINT 语句或类似语句产生的任何消息 我有一个带有一个输入参数的测试存储过程 它会生成
  • 如何让 MySQL 在查询中提示输入值? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我在 MySQL 控制台中对一些 SQL 查询进行了大量的试验和错误 例如 select
  • 查询生成器在字段类型数组上添加条件

    我的问题很简单 是否可以使用原则和查询生成器在字段类型数组上添加 where 语句 在我的实体内 我有以下内容 var array ORM Column name weekDays type array private weekDays 在
  • PHP 世博会推送通知

    我正在尝试使用 PHP 向我的 React Native 应用程序发送推送通知 下面的代码也发送了所有注册其令牌的用户 并且它一次发送了大量通知 尽管该令牌适用于特定设备 但它不断将通知推送给所有用户 key ExponentPushTok
  • 在 mongoose/mongodb/node 中使用异步回调循环

    我是 nodejs mongo mongoose 的新手 我正在尝试做一件非常简单的事情 我有以下架构 var authorSchema mongoose Schema name String Author mongoose model A
  • DrawingArea无法获取XID

    我有以下 Python 2 7 PyGObject 3 0 PyGST 0 10 模块 from gi repository import Gtk Gdk GdkPixbuf import pango import pygst pygst