[ruby-list:41644] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb

From: Hidetoshi NAGAI <nagai@...>
Date: 2005-12-03 07:18:58 UTC
List: ruby-list #41644
永井@知能.九工大です.

御協力に感謝します.

From: 天野 竜太郎 <wn9r-amn@asahi-net.or.jp>
Subject: [ruby-list:41637] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb
Date: Fri, 2 Dec 2005 21:25:22 +0900
Message-ID: <2CD5B3C8-8E17-44CB-9359-618C73FA8B99@asahi-net.or.jp>
> 8.4.10のtcl.hやtk.hは、
> /Library/Frameworks/Tk.framework/Versions/8.4/Headers/tk.h
> /Library/Frameworks/Tcl.framework/Versions/8.4/Headers/tcl.h
> です。
    (snip)
>  >パッチをあてずに ./configure --enable-pthread --enable-tcltk- 
> framework
>  >( --enable-macosx-aqua は付けない) とした場合でも
>  >問題なく動作するでしょうか?
> 問題ありませんでした。8.4.10のほうとリンクされました。

ということでしたら,件のパッチは必要ないということですね.
ありがとうございました.

>  >単純な例ですが,以下でも出ませんか?
> ---------------------------------------------
> require 'tk'
> top = TkToplevel.new
> m = TkMenu.new(top, :tearoff=>false)
> m.add(:command, :label=>'hoge', :command=>proc{p 'hoge'})
> top.menu(m)
> Tk.mainloop
> ---------------------------------------------
> 何もない空のウィンドウが二つ出てきます。
> ファイル名をtk.rbにしていますが、tk.rbとw00000 
> という2つのウィンドウです。

すみません.
Tcl/Tk の toplevel ウィジェットのマニュアルを確認したら
------------------------------------------------
 Command-Line Name:-menu
 Database Name:  menu
 Database Class: Menu

        Specifies a menu widget to be used as a menubar. On
        the  Macintosh,  the  menubar  will  be   displayed
        accross  the  top of the main monitor. On Microsoft
        Windows and  all  UNIX  platforms,  the  menu  will
        appear  accross  the toplevel window as part of the
        window dressing maintained by the window manager.
------------------------------------------------
と出ていました.
Tcl/TkAqua もこの Macintosh のルールに従うのであれば
ディスプレイの一番上にメニュー項目が出ていたりしないでしょうか?

もし wish を動かして,
------------------------------------------------
toplevel .t
menu .m
.m add command -label hoge -command {puts hoge}
.t configure -menu .m
------------------------------------------------
としてみても hoge というメニューバーが出なければ,
いずれにせよ Tcl/TkAqua 側の問題ということになりますので
Ruby/Tk 側ではどうしようもできません.

>  > ダイアログウィンドウ
>  > 1、メッセージボックス
>  > いくつかボタンを押していると操作不能になり強
>  > 制終了しかなくなる。
    (snip)
> そこで今度は、アイコンをerror、種類を 
> abortretryignoreに変えて「メッセージボックス」ボタンを押すとダイ 
> アログが出てきてここで固まります。
> これはアイコンや種類を別のものに変えても同じく固まります。
> また最初の段階ですぐにinfoやokを別のものに変えて 
> 「メーセージボックス」を押すと、最初のダイアログが出てきて、 
> OKを押して確認のダイアログウィンドウが出てきた時点で固まります。
> あと出てくるアイコンがそれにふさわしいものになるのだと思うのです 
> が、なっていません。

これはちょっとやっかいな問題のようです.
radiobutton で種類の変更をしたりすると固まると考えればいいでしょうか?
それとも,種類の変更をしなくても,繰り返すと固まるでしょうか?

>  > 2、ファイル選択ダイアログ
>  > 機能していないと思います。
> これはどのように機能するのでしょうか?
> 例えば、「開く」の方だとBrowseボタンでファイルを選択して 
> Openボタンを押すと入力フィールドにフルパス名が出てさらにそのファ 
> イルの内容まで開かれるのでしょうか?
> フルパス名が出るだけなら問題ありません。

ファイルを選択するためのダイアログが出て,
選んだファイルのパスがフィールドに表示されるのなら OK です.

> 後、Motifボタンは機能しませんが、Macの場合は関係ない 
> んですよね。

外観 (padding 等) が微妙に変わるだけですので,
Tcl/TkAqua では関係ない可能性が高いですね.

> 2点ほど
> これはデフォルトのruby-1.8.2+TclTk8.4.7でもそうなのです 
> が、ターミナルから
> ruby tk.rbやirbからtkウィンドウを作ってもターミナル 
> の背面に出てきます。操作するためにターミナルをずらすなどしてク 
> リックする必要があります。
> 10.4で同じようにデフォルトでインストールされているPython  
> Tkinterでもそうなるので仕方ないのかもしれませんが、同じようにデ 
> フォルトでインストールされているwxPythonは、最初の起動から 
> 前面に出てきます。
> 同じように最初から前面に出てくると嬉しいのですが。

これはシステム環境に依存する話でしょうから,
強制的に前面にするようにしてしまうと問題になるかもしれません.
ですので,Ruby/Tk で特別な対処を埋め込むことはしませんが,
require 'tk' の後で
---------------------------------------------------
class << Tk
  alias _mainloop mainloop
  def mainloop
     Tk.root.raise
     _mainloop
  end
end
---------------------------------------------------
などとしておいたら,Tk.mainloop の呼び出し時に
前面に出てきてくれるのではないかと思います.

> 日本語入力は、AquaTclTkに頑張ってもらうしかないんですよね。
> wxPythonはできるのでうらやましい。

はい.残念ながら,そういうことになります.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread