如何将自定义功能连接到GTK按钮的单击操作?

Gar*_*tet 3 gtk vala gtk3 elementary-os

我正在逐步完成Elementary OS提供的Vala GTK + 3教程。我了解这段代码:

var button_hello = new Gtk.Button.with_label ("Click me!");
button_hello.clicked.connect (() => {
    button_hello.label = "Hello World!";
    button_hello.set_sensitive (false);
});
Run Code Online (Sandbox Code Playgroud)

单击按钮时,使用Lambda函数更改按钮的标签。我想做的是改为调用此函数:

void clicked_button(Gtk.Button sender) {
    sender.label = "Clicked. Yippee!";
    sender.set_sensitive(false);
}
Run Code Online (Sandbox Code Playgroud)

我已经试过了:

button.clicked.connect(clicked_button(button));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时,我从Vala编译中收到此错误:

hello-packaging.vala:16.25-16.46: error: invocation of void method not allowed as expression
    button.clicked.connect(clicked_button(button));
                           ^^^^^^^^^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)
Run Code Online (Sandbox Code Playgroud)

我对Vala和Linux都是新手,所以请保持谦虚,但是有人可以向我指出正确的方向吗?

AlT*_*mas 5

您需要传递对函数的引用,而不是函数的结果。因此应该是:

button.clicked.connect (clicked_button);

单击该按钮时,GTK +将以clicked_button该按钮作为参数调用该函数。

错误消息invocation of void method not allowed as expression告诉您您正在调用(调用)该方法,但没有结果(无效)。在()函数名称的末尾添加括号会调用该函数。