问题标签 [pygobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
803 浏览

python - 使用 GtkBuilder 自动连接信号时对话框中断,但在手动连接信号时有效

我想要一个对话框窗口,其中一些按钮关闭对话框,而其他按钮则不关闭。我这样做的方法是使用response来自对话框的信号Gtk.Dialog来调用emit_stop_by_name('response')。(如果有人知道这样做的更好方法,那可能会抢占这个问题的其余部分。)

这在我使用 PyGTK 时有效。我现在要迁移到 PyGObject .. 似乎只有当我手动连接到响应信号而不是使用Gtk.Builder.connect_signals().

但不要相信我的话。这是我的问题的一个最小示例:

当你运行它时,你会得到一个带有单个按钮的窗口。当您单击该按钮时,会弹出一个对话框,其中包含两个按钮,一个标记为“不关闭对话框”,另一个标记为“关闭对话框”。运行上面的代码时,两个按钮都会关闭对话框。

但是,如果您从使用更改为Gtk.Builder.connect_signals()通过替换手动连接信号

然后它开始按设计工作(“不关闭对话框”按钮不会关闭对话框)。

但是在这种情况下,这两行不应该在功能上完全相同吗?有没有办法弄清楚这两种情况之间有什么不同?

我可以告诉信号在这两种情况下仍然是连接的,因为文本仍然从DummyDialog.on_response. widget.emit_stop_by_name('response')但是当我使用 GtkBuilder 时,该部分似乎停止工作。

更令人困惑的是,如果您使用这个确切的代码并在 PyGTK 上运行它(更改from gi.repository import Gtkimport gtk as Gtk),那么它在两种情况下都能正常工作(使用self.builder.connect_signals(self)or self.dialog1.connect('response', self.on_response))。

0 投票
0 回答
417 浏览

python - 如何使用 PyGObject 的密钥文件设置后端?

GIO(GLib 的 I/O 库)有一个使用密钥文件的 GSettings 后端。从 C 语言中,您可以创建此后端的实例,以强制使用密钥文件而不是系统注册表,g_keyfile_settings_backend_new()然后使用g_settings_new_with_backend(). 但是,要做到这一点,你必须#define G_SETTINGS_ENABLE_BACKEND在你的代码中,因为后端公共 API 是不稳定的。

我想从 Python 中使用 PyGObject 执行此操作(为了清楚起见,因为这个术语令人困惑 - 这是 GTK 3 附带的 GObject 自省库,而不是 PyGTK 和 GTK 2 附带的 PyGObject。)我可以

但是,没有对应于g_keyfile_settings_backend_new()in的函数dir(Gio)。如果我尝试实例化后端,

那么,有人有任何指示吗?或者也许没有编译 Python 模块G_SETTINGS_ENABLE_BACKEND,我不走运?

0 投票
2 回答
815 浏览

python - pyGObject 透明光标

如何使用 Python GTK3 和 pyGObject 获得透明光标。我已经搜索了互联网高低,但找不到任何东西。我发现了很多使用 pixmap 的示例,但我相信 pyGObject 没有 pixmap。我似乎找不到任何关于替换 pixmap 的文档。帮助我卡住了。

谢谢山姆

0 投票
1 回答
1038 浏览

gtk - GtkClutter Actor 信号未触发

我正在尝试使用 GtkClutter 编写一个应用程序,但我无法让演员发出信号。这是一个示例

所有信号都工作正常,但像“按钮按下”和“运动”这样的鼠标信号没有在杂乱演员 (MyRect/MyCanvas.stage) 对象上触发。即使我放弃子分类并使用股票类做所有事情也不会。

我想 GtkWindow 或 GtkEmbed 不允许鼠标事件传播到 ClutterStage

简化版

仅使用 Clutter 时,舞台和演员会发出鼠标信号。使用 GtkClutter.Embed 将舞台嵌入 GtkWindow 时,它只是不起作用

更新

当我尝试从C 中的http://www.openismus.com/documents/clutter_tutorial/0.9/docs/tutorial/html/sec-stage-widget.html运行示例时,它运行良好但将其转换为python ( https://gist.github.com/1759658 ) 根本不起作用。

通过不工作,我的意思是舞台不会触发“按钮按下事件”

0 投票
1 回答
523 浏览

python - python gir / Gtk.Image:为什么它会破坏我的图像?

我正在使用一个返回 Gtk.Image 对象的外部 api。我正在尝试将 Gtk.Image 写入文件。为了说明问题,我创建了以下代码:

该文件被写入磁盘但已损坏。为什么会损坏?

0 投票
1 回答
536 浏览

python - 更新 Gedit 侧面板

我正在编写我的第一个 gedit 插件,一个侧边栏的目录浏览器。

显示带有 cwd 内容的侧面板。

self._side_widget = self.get_dir() #返回一个 Gtk.Treestore obj

self.side_panel = self.window.get_side_panel()

self.side_panel.add_item(self._side_widget,“目录浏览器”,“目录浏览器”,无)

self.side_panel.activate_item(self._side_widget)

双击一个文件,我在 gedit 中打开该文档。

双击一个目录,我改变了目录,我想更新侧面板的内容。

我可以使用 self.get_dir() 从当前工作目录构建一个新的树存储,但我不知道如何更新 self.side_panel。

0 投票
1 回答
1571 浏览

python - Python、Django 和事件循环(定期作业)

我正在为在 Debian Linux 下使用 Django + WSGI + Apache 的服务器开发 Python 应用程序。该应用程序具有 Web 界面和命令行界面(仍然使用 django 模型......,只是不使用视图和模板)。
数据库后端是 SQLite3。

此应用程序还需要定期运行一些作业。我编写了一个使用 python-gobject 和 python-glib 的类 unix 守护程序,并像这样运行这些作业:

我测试了一下,sqlite db中写入的数据有一些奇怪的问题。我认为这是因为有两个 Python 实例从/向单个 sqlite db 读取和写入。一个用于 apache+wsgi,一个用于我自己的守护进程。(或事件 3 Python 实例,当我使用命令行界面时)

我的问题是,建议我做什么?将那些 timeout_add 和 MainLoop 放在我的“dj_survey.wsgi”中以在 apache 启动时运行?

0 投票
1 回答
568 浏览

python - 使用 PyGobject 创建自定义 GtkCellRenderer

我正在编写 Gtk 应用程序。直到知道我一直在使用 pygtk,但由于 PyGobject 已被弃用,所以我决定进行切换。回到 pygtk 时代,人们可以扩展 gtk.GenericCellRenderer,但这个类不再存在。

我试图在 python 中找到使用新 API 的示例,但我失败了。任何人都可以展示一个我可以用作起点的自定义单元格渲染器的示例吗?

0 投票
1 回答
1667 浏览

python - 覆盖 PyGObject 中的虚拟方法

我正在尝试使用 Python 为我的自定义小部件在 GTK中实现高度宽度几何管理。我的小部件是 Image 的子类,Gtk.DrawingArea并绘制了 Image 的某些部分。

据我了解 GTK 文档(上面的链接),我必须实现以下 4 种方法:

  • GtkWidgetClass.get_preferred_width()
  • GtkWidgetClass.get_preferred_height()
  • GtkWidgetClass.get_preferred_height_for_width()
  • GtkWidgetClass.get_preferred_width_for_height()

现在想知道在 Python 中在哪里实现它。

我试过这个:

但是这些方法不会被调用。在 C 中,您可以定义函数并将其设置为小部件,如下所示:

这是如何在 Python 中完成的?

0 投票
2 回答
2072 浏览

python - 通过函数将文本插入 TextBuffer - python

我有以下问题:

如何在我的文本缓冲区中插入文本?

接口.py

并在文件中导入“DrawCommandView”

命令.py

但我不断收到此错误:

谢谢你的帮助!

问候