いくつかのデータを使用可能な形式に変更するための小さなプログラムを作成しようとしています。私がやりたいことの1つは、いくつかのファイルを選択してそれらに対してアクションを実行できるようにすることです。そのため、Tkのリストボックスオブジェクトを使用してそれを行うと思いました。ファイルを開いて、そのファイル名がリストボックスに表示されるようにしたいと思います。私が読んだ限りでは、これはまさにリストボックスでlistvariableを使用する目的です。しかし、コードを実行すると、リストボックスが更新されることはありません(ただし、listvariable変数に既に含まれている項目は正常に表示されます)。
したがって、これはMWEに近いものです。私は何を間違っているのですか、そして私はどのような基本的な考えを誤解していますか?
require 'tk'
require 'tkextlib/tile'
$path_list = []
$populate_list = TkVariable.new( $path_list )
def get_file
file = Tk.getOpenFile
file = open(file) unless file.empty?
path = File.basename(file, ".out")
if $path_list.include?(path)
Tk.messageBox(
'type' => "ok",
'icon' => "warning",
'title' => " - Minimum Working Example - ",
'message' => "This file has already been added! Nothing was added to the list"
)
else
$path_list.push(path)
end
end
root = TkRoot.new {title "- Minimum Working Example -"}
frame = Tk::Tile::Frame.new(root) {padding "3 3 12 12"}.grid( :sticky => 'nsew') # 'north south east west'
TkGrid.columnconfigure root, 0, :weight => 1; TkGrid.rowconfigure root, 0, :weight => 1
$file_listbox = Tk::Listbox.new(frame) {
listvariable $populate_list}.grid( :column => 1, :row => 0, :rowspan => 6)
Tk::Tile::Button.new(frame) {
width 15; text 'Open file...'; command {get_file}}.grid( :column => 0, :row => 1)
Tk.mainloop
他の順序で書く必要があるのでしょうか?