質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

5340閲覧

【RubyGTK3】RubyGTK3を使ったプログラムのexe化について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/12/12 14:50

編集2016/12/13 14:18

###前提・実現したいこと
Rubyでデスクトップマスコット(現時点では透過pngを画面に表示するだけ)の制作を目指しています。
できあがったプログラムをocraでexe化しようとすると
「`validate_arguments': Gio::Icon.hash: wrong number of arguments (0 for 1)」が発生します。

この問題を解決したいです。

###発生している問題・エラーメッセージ

Ruby

1=== Loading script to check dependencies 2=== Attempting to trigger autoload of Gem::ConfigFile 3=== Attempting to trigger autoload of Gem::DependencyList 4=== Attempting to trigger autoload of Gem::DependencyResolver 5=== Attempting to trigger autoload of Gem::Installer 6=== Attempting to trigger autoload of Gem::Licenses 7=== Attempting to trigger autoload of Gem::RequestSet 8=== Attempting to trigger autoload of Gem::Source 9=== Attempting to trigger autoload of Gem::SourceList 10=== Attempting to trigger autoload of Gem::SpecFetcher 11C:/Ruby23/lib/ruby/gems/2.3.0/gems/gobject-introspection-3.1.0-x86-mingw32/lib/gobject-introspection/loader.rb:640:in `validate_arguments': Gio::Icon.hash: wrong number of arguments (0 for 1) (ArgumentError) 12 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/gobject-introspection-3.1.0-x86-mingw32/lib/gobject-introspection/loader.rb:589:in `build' 13 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/gobject-introspection-3.1.0-x86-mingw32/lib/gobject-introspection/loader.rb:101:in `block in define_singleton_method' 14 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ocra-1.3.6/bin/ocra:470:in `block (2 levels) in attempt_load_autoload' 15 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ocra-1.3.6/bin/ocra:469:in `each' 16 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ocra-1.3.6/bin/ocra:469:in `block in attempt_load_autoload' 17 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ocra-1.3.6/bin/ocra:463:in `loop' 18 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ocra-1.3.6/bin/ocra:463:in `attempt_load_autoload' 19 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ocra-1.3.6/bin/ocra:715:in `build_exe' 20 from C:/Ruby23/lib/ruby/gems/2.3.0/gems/ocra-1.3.6/bin/ocra:1177:in `block in <top (required)>' 21

###該当のソースコード

Ruby

1require"gtk3" 2=begin 3これは背景が透明なウィンドウを表示して 4そこに画像を表示するプログラムです 5バツボタンが表示されないので、下のアイコンから閉じてください。 6動かすのに必要なもの 7・Ruby 8・gtk3 9・image.pngという名前の画像(6.のファイル名を変更するなら名前は何でもよい。) 10=end 11 12window = Gtk::Window.new #1.ウィンドウを作ります。 13 14 15window.signal_connect("destroy"){Gtk.main_quit} #2.ウィンドウがdestroyされたら終了。 16 17window.decorated = false #3.ウィンドウの枠を消します。trueにすると表示されます。 18 19window.keep_above = true #4.ウィンドウを常に最前面に表示するようにします。 20 21color = Gdk::RGBA::new(0, 0, 0, 0) #5.色を決めます。数値は0 ~ 1で設定します。数値の順番はRGBAでAが0なら他は何でもよいです。 22 23window.override_background_color(0, color) #6.ウィンドウの背景色を変更します。0にしないと背景色が変わりません。 24 25image = Gtk::Image.new(:file => "image.png") #7.画像を読み込みます。 26 27window.add(image) #8.ウィンドウに加えます。 28 29window.show_all #9.ウィンドウに載っているものをすべて表示します。 30 31Gtk.main #10.ループ

###試したこと
ここに書いてあることを参考にして書いてみました。
結果:undefined method `new_for_string' for Gio::Icon:Module (NoMethodError)が発生した。
ここを探してみましたが「Gio::Icon.hash」は見つかりませんでした。
ここを参考にプログラムを起動しないでexe化してみました。
結果:exe化はできたが「require : cannnot load such file -- gtk3(LoadError)」が発生して動かない。
Rubyのバージョンを変更してみました。Rubyは全て32bit版をRubyInstllerからダウンロードしました。
結果:2.0.0だとGTK3をダウンロードしているところでエラーが発生します。2.1.9, 2.2.6, 2.3.3はGTK3をダウンロードして上のプログラムを動かすことはできましたが、ocraを使うと同じエラーが発生します。

###補足情報(言語/FW/ツール等のバージョンなど)
ruby 2.3.1
gtk3 3.1.0
ocra 1.3.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Windowsには標準でGTK+が入っていないので、ocraでGem化する場合は非常に重いものにならざるを得ません。そもそもWindowsユーザーに向けてRubyのGUIアプリを配布するのはやっかいな問題ですが、私の狭い経験ではRuby/Tk + ocraで作ったものはなんとか現実的な時間で起動します。Ruby/Tkというとウィジェットのデザインがやたら古いことで有名ですがTk::Tile::Buttonをつかえばモダンなデザイン?のボタンが作れます。あまりRubyにこだわる必要はないと思いますが参考まで。

投稿2020/09/18 00:51

kojix2

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

C#を利用して解決しました。

C#/WPFで作るデスクトップマスコット入門
アプリケーションのアイコンを変更する

これらのサイトのおかげでやりたかったことができました。

これからC#の勉強をしようと思います。

#追記

Ruby

1# encoding: utf-8 2 3require'qt' 4 5class DesktopMascot < Qt::MainWindow 6 def initialize 7 super 8 # ウィンドウにセットするラベルの設定 9 label = Qt::Label.new 10 base = Qt::Image.new('character/000000/1.png') 11 # base = base.mirrored(true, false) => 画像の反転 12 # base = base.scaled(500, 500, Qt::KeepAspectRatio, Qt::SmoothTransformation) => リサイズ 13 pix = Qt::Pixmap::fromImage(base) 14 label.setPixmap(pix) 15 effect = Qt::GraphicsDropShadowEffect.new 16 effect.setColor(Qt::Color.new(0, 0, 0)) 17 effect.setOffset(3, 3) 18 effect.setBlurRadius(20) 19 label.setGraphicsEffect(effect) 20 21 # ウィンドウの設定 22 setCentralWidget(label) 23 setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint) 24 setAttribute(Qt::WA_TranslucentBackground) 25 26 # マウスで移動させるための設定 27 @offset = Qt::Point.new 28 @left = false 29 30 # 各種アクション 31 createAction() 32 end 33 34 def mousePressEvent(event) 35 if event.button() && Qt::LeftButton 36 @offset = event.pos() 37 @left = true 38 end 39 end 40 41 def mouseMoveEvent(event) 42 if @left 43 move(mapToParent(event.pos() - @offset)) 44 end 45 end 46 47 def mouseReleaseEvent(event) 48 if event.button() && Qt::LeftButton 49 @left = false 50 end 51 end 52 53 def contextMenuEvent(event) 54 menu = Qt::Menu.new(self) 55 menu.addAction(@exitAct) 56 menu.exec(event.globalPos()) 57 end 58 59 def createAction() 60 @exitAct = Qt::Action.new(tr('EXIT'), self) 61 connect(@exitAct, SIGNAL('triggered()'), self, SLOT('close()')) 62 end 63end 64 65app = Qt::Application.new(ARGV) 66 67mascot = DesktopMascot.new 68mascot.show 69 70app.exec

qtbindingsというgemを利用します。
これならocraでexe化できます。(ただし、とても時間がかかる。)
起動にも時間がかかるので、Rubyにこだわらなければ他の言語で作った方がよさげです。
上のコードで、非矩形ウィンドウの作成とタイトルバーがない状態での
ドラッグ移動ができるようになっています。

参考
Qtでデスクトップマスコット的なのを実現する方法
QT4 Drag Window Without Title Bar
Moving object with mouse
widget透過のまとめ

投稿2016/12/14 10:45

編集2017/05/04 06:18
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問