有没有办法让FileChooserDialog同时选择文件和文件夹?
我知道有FileChooserAction OPEN和SELECT_FOLDER,但它们是独占的。
PD:我不想要两个按钮,我已经知道如何做到这一点。我想要的是使用相同的按钮获取所有选定元素(文件和文件夹)的路径。答案 0 :(得分:3)
文件选择器操作与您想要的不同。我认为您使用的是set_select_multiple ()
方法或select_multiple
属性(均来自Gtk.FileChooser接口)。
然后,您可以根据需要使用get_filenames ()
或get_uris ()
方法。
默认的GtkFileChooserDialog只允许您选择文件夹和文件,如果您在最近的“选项卡”上,但只要您使用普通文件夹,它就不允许您这样做。
为了实现这一点,你必须通过编写解决方案或创建一个新的小部件来使用Gtk.FileChooserWidget(例如,继承Gtk.FileChooserWidget或Gtk.Dialog)。
我创建了一个简单的示例,可以根据需要使用,并且可以轻松更改以满足您的需求。
以下代码基于Valadoc.org Gtk。FileChooserWidget页面,它可以满足您的要求:
...
编译:
file:///.../stackoverflow/3305/1
file:///.../stackoverflow/3305/2
file:///.../stackoverflow/3305/3
file:///.../stackoverflow/3305/Gtk.FileChooserDialog
file:///.../stackoverflow/3305/Gtk.FileChooserDialog.vala
file:///.../stackoverflow/3305/Gtk.FileChooserWidget
file:///.../stackoverflow/3305/Gtk.FileChooserWidget.vala
file:///.../stackoverflow/3305/img1.jpg
file:///.../stackoverflow/3305/img2.jpg
file:///.../stackoverflow/3305/img3.jpg
file:///.../stackoverflow/3305/Makefile
选择选择后,应用程序会将您的选择打印到控制台:
转储(路径部分替换为for ($i=1; $i<$ii_h-1; $i++) {
$ii[$i*$ii_w] = 0;
$ii2[$i*$ii_w] = 0;
$rowsum = 0;
$rowsum2 = 0;
for ($j=1; $j<$ii_w-1; $j++) {
$rgb = ImageColorAt($canvas, $j, $i);
$red = ($rgb >> 16) & 0xFF;
$green = ($rgb >> 8) & 0xFF;
$blue = $rgb & 0xFF;
$grey = (0.2989*$red + 0.587*$green + 0.114*$blue)>>0; // this is what matlab uses
$rowsum += $grey;
$rowsum2 += $grey*$grey;
$ii_above = ($i-1)*$ii_w + $j;
$ii_this = $i*$ii_w + $j;
$ii[$ii_this] = $ii[$ii_above] + $rowsum;
$ii2[$ii_this] = $ii2[$ii_above] + $rowsum2;
}
}
):
%<.cpp