Невозможно создать отдельную программу, используя Ruby / Tk с ocra - PullRequest
1 голос
/ 18 апреля 2019

У меня проблемы с созданием автономной программы с 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\, поэтому он не применяется.

...