У меня проблемы с созданием автономной программы с ocra с использованием Ruby / Tk.Прежде всего, вот простая тестовая программа:
require 'tk'
hello = TkRoot.new do
title "Test" minsize(100, 40)
end
TkLabel.new(hello) do
text "Tk version is #{Tk::TK_PATCHLEVEL}"
pack { padx 15; pady 15; side 'left'}
end
Tk.mainloop
Это будет работать нормально, если запускаться сам по себе.
Если я запускаю ocra tk-test.rb
, приложение всплывает, как и ожидалось, но когдаон завершается, возникает необработанное исключение:
$ ocra tk-test.rb
C:/Ruby25/lib/ruby/gems/2.5.0/gems/tk-0.2.0/lib/tk/font.rb:126:in `<class:TkFont>': unhandled exception
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/tk-0.2.0/lib/tk/font.rb:9:in `<top (required)>'
from C:/Ruby25/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
from C:/Ruby25/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/tk-0.2.0/lib/tk/fontchooser.rb:6:in `<top (required)>'
from C:/Ruby25/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
from C:/Ruby25/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:478:in `const_get'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:478:in `block (3 levels) in attempt_load_autoload'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:472:in `each'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:472:in `block (2 levels) in attempt_load_autoload'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:470:in `each'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:470:in `block in attempt_load_autoload'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:464:in `loop'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:464:in `attempt_load_autoload'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:723:in `build_exe'
from C:/Ruby25/lib/ruby/gems/2.5.0/gems/ocra-1.3.10/bin/ocra:1203:in `block in <top (required)>'
=== Loading script to check dependencies
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::CheckButton
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Entry
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Frame
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::LabelFrame
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Listbox
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Menu
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Message
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::PanedWindow
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Scale
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Scrollbar
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Spinbox
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Text
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Toplevel
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Clock
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::OptionObj
=== Attempting to trigger autoload of #<Class:#<Tk::Label:0x02ef01b8>>::Fontchooser
Ruby был установлен с использованием Rubyinstaller со средой разработки MSYS2.
Версия Ruby:
RUBY VERSION: 2.5.3 (2018-10-18 patchlevel 105) [i386-mingw32]
УстановленоВерсии gem:
ocra (1.3.10)
tk (0.2.0)
Поиск в Google указывает, что у других были подобные проблемы, но ответы на все вопросы устарели или неприменимы.Например, этот ответ выглядит многообещающе, но в моей среде нет такого каталога, как C:\Ruby25\lib\tcltk\
, поэтому он не применяется.