首页 > 解决方案 > 格式化 Gtk.SpinButton 的输出不适用于单击鼠标

问题描述

我正在尝试格式化Gtk.SpinButtonGJS 中的输出。现在的目标是简单地将字符串“前缀”添加到 SpinButton 的文本中。

这是一个准系统实现:

#!/usr/bin/gjs

imports.gi.versions.Gtk = "3.0";

const { Gtk } = imports.gi;

Gtk.init(null);

let window = new Gtk.Window();
let adjustment = Gtk.Adjustment.new(0, 0, 10, 1, 0, 0);
let spinButton = new Gtk.SpinButton();

spinButton.adjustment = adjustment;
spinButton.wrap = true;
spinButton.width_chars = 10;

window.add(spinButton);

spinButton.connect('output', formatOutput);
spinButton.connect('value-changed', reportChange);

function formatOutput(button) {
    let prefixed = `prefix${button.adjustment.value}`;
    button.set_text(prefixed);
    return true;
}

function reportChange(button) {
    log(`value changed ${button.value}`);
}

window.show_all();

window.connect('destroy', Gtk.main_quit);

Gtk.main();

正如文档所建议的,我利用了Gtk.SpinButton'soutput信号。

当我:

  1. Gtk.SpinButton用鼠标滚轮滚动
  2. 用鼠标左键单击并按住Gtk.SpinButton-/+ 按钮

但是,单击 -/+ 按钮不会改变超过两个增量的值(例如,如果初始值为 0 和step-size1,则单击增量只会达到 1(或其他方向的 -1)并停在那里) .

此外,似乎无论何时output连接信号(即使它只是返回true),单击都会触发value-changed信号两次:SpinButton 的值首先设置为零,然后递增。结果是,对于单击, 的值Gtk.SpinButton停留在值0+incrementor 0-increment。我不知道如何解释这种行为..有什么想法吗?谢谢

标签: javascriptgtkgjs

解决方案


看来我们还需要连接到 Gtk.SpinButton 的输入信号(https://gjs-docs.gnome.org/gtk30~3.24.18/gtk.spinbutton#signal-input),我们无法处理,因为它有一个GPointer 作为它的参数之一。最终,我想使用 Gtk.SpinButton 来选择一天中的时间,但 GJS 似乎不可能。至少现在。


推荐阅读