Stellt vor, wie man plattformübergreifende Software/Apps mit grafischen Benutzeroberflächen für Windows, Mac OSX und Linux mit Rubys JRuby-Bibliothek erstellt.
Ich möchte eine plattformübergreifende Ruby-GUI-Anwendung mit shoes (shoes4) in einer Windows 10-Umgebung erstellen.
Vorbereitung
- Installieren Sie Java und JDK
- Installieren Sie jruby
Von Downloads — JRuby.org klicken und JRuby 9.2.0.0 Windows Executable (x64) herunterladen.
Installieren Sie es, setzen Sie den Pfad, starten Sie PowerShell usw. neu und überprüfen Sie, ob jruby installiert ist.
jruby --version
- jruby -S gem install shoes --pre
Referenz: shoes/shoes4: Shoes 4 : the next version of Shoes
Ausprobiert
app.rb
Shoes.app width: 300, height: 200 do
background lime..blue
stack do
para "Welcome to the world of Shoes!"
button "Click me" do alert "Nice click!" end
image "http://shoesrb.com/img/shoes-icon.png",
margin_top: 20, margin_left: 10
end
end
shoes app.rb
Dies sollte ein GUI-Fenster öffnen.
Verpacken
PS C:\pg\rubyGuiAppDev> shoes package --help
Usage: shoes-swt [options]
--jar Package as executable JAR file
--mac Package as OS X application
--windows Package as Windows application
--linux Package as Linux application
Ups, Fehler…
PS C:\pg\rubyGuiAppDev\_> shoes package --windows .\app.rb
Packaging windows...
rm -f pkg/tmp/app.jar
Creating pkg/tmp/app.jar
ArgumentError: same file: pkg/tmp/windows-app-template/app.bat and pkg/tmp/windows-app-template/app.bat
block in fu_each_src_dest at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1557
fu_each_src_dest0 at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1574
fu_each_src_dest at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:1556
mv at C:/jruby-9.2.0.0/lib/ruby/stdlib/fileutils.rb:516
after_built at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/furoshiki-0.6.1/lib/furoshiki/windows_app.rb:34
package at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/furoshiki-0.6.1/lib/furoshiki/base_app.rb:41
block in run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/lib/shoes/swt/packager.rb:52
each at org/jruby/RubyArray.java:1801
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/lib/shoes/swt/packager.rb:49
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/packager.rb:24
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/ui/cli/package_command.rb:14
run at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-core-4.0.0.rc1/lib/shoes/ui/cli.rb:40
<main> at C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/shoes-swt-4.0.0.rc1/bin/shoes-swt:37
load at org/jruby/RubyKernel.java:994
Es heißt, es gibt Dateien mit demselben Namen, also ändern Sie den Namen.
app > firstapp
PS C:\pg\rubyGuiAppDev\_> shoes package --windows .\firstapp.rb
Packaging windows...
rm -f pkg/tmp/firstapp.jar
Creating pkg/tmp/firstapp.jar
Fertig.
Entpacken Sie das erstellte firstapp-windows.zip und führen Sie die .jar-Datei darin aus, um die GUI zu öffnen.
Referenz
Sobald Sie dies bestätigt haben, schauen wir uns das Rdoc an.
Top Level Namespace — Documentation for shoes/shoes4 (master)
Debugging-Methode
Ich bin neugierig auf die ask_open_file-Methode, aber speichert sie den Inhalt der geöffneten Datei in einem Objekt? Wie ruft man sie ab?
Da ich Java und Jruby zum ersten Mal berühre (obwohl ich Java ein wenig berührt habe), verstehe ich den IO-Teil auf der Windows-Seite nicht.
In solchen Zeiten wünsche ich mir, ich könnte mit pry debuggen…
The development group in Shoe's Gemfile has pry and pry-nav installed, which should give a solid, basic debugging experience when necessary.[Development and Debugging Tools · shoes/shoes4 Wiki](https://github.com/shoes/shoes4/wiki/Development-and-Debugging-Tools)

Fertig. ask_open_file scheint den absoluten Pfad der ausgewählten Datei zurückzugeben.
Vorgehensweise:
- Installieren:
jruby -S gem install pry - Fügen Sie dort hinzu, wo Sie das Debugging starten möchten
require "pry"
binding.pry
Es heißt, pry ist in der Gemfile und Sie können es sofort verwenden, aber Sie können es nicht ohne Installation verwenden. Ich verstehe es nicht wirklich. Nun, Sie können es installieren, also ist es ok.
Wenn Sie beenden möchten, verwenden Sie quit, und Sie können die Hilfe mit help sehen.
Das pry, das ich kenne, verwendet continue, aber ich frage mich, ob pry und pry-byebug unterschiedlich sind. Ich verstehe es nicht wirklich.
Übrigens kann pry-byebug nicht installiert oder benötigt werden. Wenn Sie jruby -S gem install pry-byebug ausführen, erhalten Sie einen make-Fehler ERROR: Failed to build gem native extension.. Ich denke, es bedeutet, verwenden Sie es nicht.
Die Beruhigung von pry.
Debug von GUI starten
Lassen Sie pry starten, wenn Sie eine Schaltfläche drücken.
button do |b|
b.text = 'pry'
if b.enabled?
binding.pry
end
end
Schaltfläche drücken sendet Textbox-Wert an Ruby
Die edit_box-Methode wird jedes Mal ausgeführt, wenn Sie Text eingeben, und @edit_box_text wird neu geschrieben. Wenn Sie die Senden-Schaltfläche drücken, gibt es @edit_box_text aus.
edit_box do |e|
@edit_box_text = e.text
end
button "send" do |b|
puts @edit_box_text
end
Es gibt auch Methoden, die Klassen wie inputBox aufrufen.
Referenz:
shoes4/element.rb at d16159b94ae8190059e1d596332da1ad9346b0a7 · shoes/shoes4