【问题标题】:PyGObject GTK+ GLib.Date strftime()PyGObject GTK+ GLib.Date strftime()
【发布时间】:2016-04-19 19:28:56
【问题描述】:

Poppler 中的方法调用在我的 Python 代码中返回一个 GDate 对象。我找不到如何很好地打印这个对象的方法。

按照Python GI API Reference,我想出了以下内容:

gdate_object = annot_mapping.annot.get_date()
destination_buffer = '.' * 50
print('Output:', GLib.Date.strftime(destination_buffer, 50, '%c', gdate_object))
print('Buffer:', annot_time)

然而,这不会在缓冲区中放置任何内容,而它确实输出写入的缓冲区大小。

如何访问目标缓冲区?

【问题讨论】:

    标签: python-3.x pygobject gobject-introspection


    【解决方案1】:

    似乎没有人记录该 API,因此它会因自省绑定而被破坏。

    我做了一个简单的补丁,但是pygobject似乎不喜欢分配字符串缓冲区,我会和上游谈谈。

    diff --git a/glib/gdate.c b/glib/gdate.c
    index bea2448..bacdb93 100644
    --- a/glib/gdate.c
    +++ b/glib/gdate.c
    @@ -2418,8 +2418,8 @@ win32_strftime_helper (const GDate     *d,
    
     /**
      * g_date_strftime:
    - * @s: destination buffer
    - * @slen: buffer size
    + * @s: (out caller-allocates) (array length=slen): destination buffer
    + * @slen: (in): buffer size
      * @format: format string
      * @date: valid #GDate
      *
    

    【讨论】:

    • 哇,感谢您的参与!我很好奇“他们”会在上游说什么。如果需要提交错误报告,请告诉我。
    • 因此,从我收集到的信息来看,该功能可能永远无法从内省的语言中使用。 lgi 只支持固定大小的数组(这是有道理的),而 pygobject 根本不支持它们。有人确实建议尝试将其转换为 GDateTime 并尽可能使用g_date_time_format()。该 API 只是为 GI 使用而设计不佳。
    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多