我正在尝试创建一个带有两个FileChooserButtons
. 第一个应该帮助用户选择一个目录,因此我正在使用操作 Select_folder; 第二个是允许用户选择一个文件。
问题是我希望第二个根据用户在第一个中所做的选择来更改当前文件夹。
我最初的想法是使用 Signal.connect,如下所示:
Signal.connect(chooser1, "selection_changed", folder_changed, null)
但是,这给了我以下编译错误:
exercise4_1.gs:62.55-62.68: error: Cannot create delegate without target for instance method or closure
Signal.connect(chooser1, "selection_changed", folder_changed, null)
^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)
我还尝试根据 vala 邮件列表中的邮件通信添加 (callback)folder_changed ,但无济于事。
这是整个代码:
[indent=4]
uses
Gtk
GLib
class TestWindow : Window
chooser1:Gtk.FileChooserButton
chooser2:Gtk.FileChooserButton
construct()
// General characteristics of the window
title = "File chooser"
window_position = WindowPosition.CENTER
destroy.connect(Gtk.main_quit)
chooser1 = new FileChooserButton(
"Choose a Folder",
FileChooserAction.SELECT_FOLDER
)
chooser2 = new FileChooserButton(
"Chooser a Folder",
FileChooserAction.OPEN
)
chooser1.set_current_folder(Environment.get_home_dir())
chooser2.set_current_folder(Environment.get_home_dir())
Signal.connect(chooser1, "selection_changed", folder_changed, null)
var box = new Gtk.Box(Gtk.Orientation.VERTICAL, 0)
box.pack_start(chooser1, true, true,0)
box.pack_start(chooser2, true, true,0)
add(box)
def folder_changed()
var folder = chooser1.get_filename()
chooser2.set_current_folder(folder)
init
Gtk.init (ref args)
var test = new TestWindow ()
test.show_all ()
Gtk.main ()
这当然是我对这种特殊语法缺乏了解,但由于我被卡住了,我希望能有一个指针让我摆脱它。
作为一个额外的,不太重要的一点,最佳实践是什么:拆分和缩进长行或允许它们在代码中?