如何使用 Python 中用 Vala 编写的自定义 GTK 小部件?

Posted

技术标签:

【中文标题】如何使用 Python 中用 Vala 编写的自定义 GTK 小部件?【英文标题】:How to use a custom GTK widget written in Vala from Python? 【发布时间】:2020-01-30 13:49:12 【问题描述】:

最近我设法通过以下命令从this Vala 文件中创建了一个共享库: 1:valac circular-progress-bar.vala -X -fPIC -X -shared -o test_shared.so --library=testShared --gir testShared-0.1.gir --pkg gtk+-3.0 2:g-ir-compiler --shared-library=test_shared.so --output=testShared-0.1.typelib testShared-0.1.gir

我在 python 中创建了一个简单的测试窗口,它显示了小部件,它只显示了文本。是 Python 还是根本不能以这种方式使用? Image of the test window/app 我尝试找到更改设置或某些值的功能,但找不到。

如果能提供任何帮助,我将不胜感激!

【问题讨论】:

它应该可以工作。您的 Python 代码是什么,您是否在控制台上遇到错误? @AlThomas 你好! pastebin.com/HVGQEYHy 我在控制台中没有收到任何错误。 你需要像这样运行它:GI_TYPELIB_PATH=. LD_LIBRARY_PATH=. python3 file.py.U 可以通过制作共享库来测试它。你可以从字面上下载 Vala 文件并使用相同的 【参考方案1】:

在您完成了编译对象和生成接口文件以在 Python 中使用小部件的困难技术步骤之后,这个答案可能有点令人震惊。据我所知,没有圆圈显示的原因是因为值为 0% - 所以没有圆圈!

小部件有一个percentage 属性,这可以在Python 中使用pb.props.percentage 进行设置。在此示例中,百分比设置为 60%,对我来说效果很好。我用pb.props.percentage = 0.6:

import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, GObject

gi.require_version('testShared', '0.1')
from gi.repository import testShared


class GUI (Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        pb = testShared.CircularProgressBar()
        pb.props.percentage = 0.6
        self.connect('destroy', self.on_window_destroy)
        self.add(pb)
        self.show_all()
        Gtk.main()

    def on_window_destroy(self, window):
        Gtk.main_quit()

if __name__ == "__main__":
    GUI()

小部件还有其他可以更改的属性,例如line_width 设置画圆的线宽。

这是显示 60% 和 line_width 设置为 10 的屏幕截图:

【讨论】:

您好!我很感激帮助。可悲的是,我不再需要该解决方案,但这可能对其他人有所帮助。我没有更改百分比的原因是因为我不知道该怎么做,而且窗口有点小故障。

以上是关于如何使用 Python 中用 Vala 编写的自定义 GTK 小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中用多行编写长算术表达式? [复制]

如何从 Vala 编译器生成 GIR 文件?

Vala的Makefile

用于 pidgin 插件的 Vala

Vala 的单元测试框架

Vala 可以在没有 GObject 的情况下使用吗?