Arrays ruby,tk-lib。getopenfile的输出

Arrays ruby,tk-lib。getopenfile的输出,arrays,ruby,tk,Arrays,Ruby,Tk,我试图通过ruby/tk lib加载多个文件并将它们放入数组: def openFiles return Tk.getOpenFile( 'title' => 'Select Files', 'multiple' => true, 'defaultextension' => 'csv', 'filetypes' => "{{C

我试图通过ruby/tk lib加载多个文件并将它们放入数组:

def openFiles
return Tk.getOpenFile(  'title' => 'Select Files',
                        'multiple' => true, 
                        'defaultextension' => 'csv',
                        'filetypes' => "{{Comma Seperated Values} {.csv}} {TXT {.txt}} {All files {.*}}")
end
然后是代码

filess = TkVariable.new()

button1 = TkButton.new(root){
text 'Open Files'
command (proc {filess.value = openFiles; puts filess; puts filess.class; puts filess.inspect})

}.grid(:column => 1, :row => 1, :sticky => 'we')
问题是,我无法以数组的形式获取输出,我不知道这是否可能,否则我将不得不以某种方式解析输出。陛下请帮忙。多谢各位

这是我单击按钮时的输出:

C:\file1
C:\file2
TkVariable
#<TkVariable: v00000>

TkVariable
实现了
#to_a
,您可以使用它将其
转换为所需的
数组

button1 = TkButton.new(root) {
  text 'Open Files'
  command (proc do
    filess.value = openFiles
    puts filess.to_a.class
    puts filess.to_a.inspect
  end)
}.grid(:column => 1, :row => 1, :sticky => 'we')

这对我在Windows 7上使用Ruby 2.2.5(含Tk 8.5.12)很有效:

需要“tk”
def extract_filenames_as_ruby_数组(文件列表字符串)
::TkVariable.new(文件列表字符串).list
结束
def文件\u打开
描述=%w[
逗号\分隔\值
文本\文件
所有\文件
]
扩展=%w[{.csv}{.txt}*]
types=descriptions.zip(extensions).map{d,e}“{{d}}}{e}”
文件\列表\字符串=::Tk.getOpenFile\
文件类型:类型,
多重:对,
标题:“选择文件”
提取\u文件名\u为\u ruby\u数组文件\u列表\u字符串
结束
def lambda_文件_打开
@lambda_files_open | |=::Kernel.lambda do
文件=打开的文件
放置文件
结束
结束
def总管
按钮1
::Tk.mainloop
结束
#Tk对象:
def b_按钮1
@b|U按钮| 1 | |=开始
b=::Tk::Tile::Button.new root
b、 命令lambda\u文件\u打开
b、 文本“打开文件”
b、 网格列:1,行:1,粘性::we
结束
结束
def根
@根| 124;=::TkRoot.new
结束
主要的

作为参考,
Tk.getOpenFile
在和文档中进行了解释。

是的别名。自动将(Ruby)数组转换为Tcl的内部语法,
TkVariable#list
将Tcl的内部语法转换回Ruby数组。因此,
TkVariable.new(%w[ab\cd])。value
的“a{bc}d”
。另外,
TkVariable.new('a{bc}d')。列表是
[“a”,“bc”,“d”]
。这些事实在文件名包含空格时非常有用(例如)。顺便说一句,
TkVariable
不在Tk的文档中。类仅在Ruby Tk包装器中定义。
button1 = TkButton.new(root) {
  text 'Open Files'
  command (proc do
    filess.value = openFiles
    puts filess.to_a.class
    puts filess.to_a.inspect
  end)
}.grid(:column => 1, :row => 1, :sticky => 'we')
Array
["C:\file1", "C:\file2"]