From: Masao Mutoh Date: 2003-04-16T01:49:48+09:00 Subject: [ruby-list:37563] Re: ruby-gtkの使い方について むとうです。 On Mon, 14 Apr 2003 07:44:45 +0900 "Mikio Kanada" wrote: > むとう さん >   > 早速の返事ありがとうございます。金田です。 > 以下がテストで作成したスクリプトです。 このサンプル、私の環境では動かないですが、 まず、その辺、だいじょうぶでしょうか。 例えば、@button2 = Gtk::Button::newのところに 全角スペースが入ってます。 #他にも全角スペースが入っていてエラーが出る #ところがありました。 で、それを除いたとして。 gdkimlibのドキュメントとソースコードを斜め読みして みたのですが、どうも GdkImlib::Image.new( "/tmp/viewer.jpg" ) の実体であるgdk_imlib_load_image()は、 イメージをキャッシュするようです。 したがって、2回目に/tmp/viewer.jpgというファイル名を 読み込む場合、実際は再読み込みせずに、前回読み込んだ情報を 表示するようになっているのだと思います。 そこで、回避策としては、毎回ファイル名を変えるようにすれば 良いと思います。 > > 添付ファイルにしたほうがよければまたメールしますので > お知らせください。 > > よろしくお願いします。 > > -------------ここから-------- > #! /usr/bin/ruby > > require "gtk" > require "gdk_imlib" > > COPYFILE = "/tmp/viewer.jpg" > > class View < Gtk::Window > def initialize( mode ) > super( mode ) > > @button1 = Gtk::Button::new("実行1[指定ファイルを表示する]") > @button1.show > @button2 = Gtk::Button::new("実行2[指定ファイルを#{COPYFILE}にコピー表 > 示する]") > @button2.show > @label = Gtk::Label.new("") > @view = Gtk::VBox.new > @view.show > > @table = Gtk::Table.new(10, 11, false) > @table.show > > @table.attach @button1, 0, 10, 0, 1 > @table.attach @button2, 0, 10, 1, 2 > @table.attach @label, 0, 10, 2, 3 > @table.attach @view, 0, 10, 3, 11 > > self.add @table > self.show_all > > @fs = Gtk::FileSelection.new("FileSelection Test") > @fs.set_filename("/tmp/") > @fs.set_modal(true) > > @fs.ok_button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do > printf("filename2 = %s\n", @fs.get_filename) > @label.set_text( @fs.get_filename ) > @fs.hide > imagedsp #指定画像を表示する > end > > @button1.signal_connect("clicked") do > @showmode = 0 > @label.set_text("button1") > @fs.show > printf("filename1 = %s\n", @fs.get_filename) > end > > @button2.signal_connect("clicked") do > @showmode = 1 > @label.set_text("button1") > @fs.show > printf("filename2 = %s\n", @fs.get_filename) > end > > self.signal_connect("destroy") do #終了する時 > exit > end > end > > def imagedsp > #ファイル選択 > @view.remove(@pixmap) if @pixmap != nil > > if @showmode == 0 then > print "mode1" > im = GdkImlib::Image.new( @fs.get_filename ) #1.指定したファイルを読み > 込む時はうまくいく > else > print "mode2" > cmd = "cp #{@fs.get_filename} /tmp/viewer.jpg" > `#{cmd}` #2.指定したファイルを、 > # /tmp/viewer.jpgにコピー > して, > # /tmp/viewer.jpgを表示す > ると > # 最初と違う画像を読み込 > んでも, > # 最初に読み込んだ画像の > まま > im = GdkImlib::Image.new( "/tmp/viewer.jpg" ) > end > im.render(300, 300) > pixd, maskd = im.get_pixmap > > @pixmap = Gtk::Pixmap.new(pixd, maskd) > @pixmap.show > > @view.pack_start(@pixmap, true, true, 0) #3 #1を実行した後は、 > @pixmapを正しく表示する > # > end > end > > #メインウインドウ作成 > window = View.new(Gtk::WINDOW_TOPLEVEL) > window.show > Gtk.main > > --------------- > > 金田 幹雄 > mmmr36211@yahoo.co.jp > > > __________________________________________________ > Do You Yahoo!? > Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/ > > > -- .:% Masao Mutoh