近藤と申します。
お絵書きアプリケーションを作っているのですが、
うまく、動きません。添削していただけないでしょうか。
以下は、作っているプログラムを簡単に直したものです。
環境は、
ruby - version 1.0-971003 (i586-linux)
wish 4.2jp (libtcl7.6jp, libtk4.2jp)
です。
プログラムの構成としては、
各データファイルごとに class Cet のインスタンスを作成して、
toplevel window を作成します。root window はwithdraw で表示しません。
問題点は、
1. Manager#initialize で Tk.after 1000, Proc.new{@root.withdraw}
で root window を消しているのですが、root window がうまく消される時
と、ずっと表示されたままの時があります。表示されたままの時が多いで
す。
2. Cet#initialize で widgets を作成しているのですが、canvas に
scrollbar をつけています。最初は、思った通りに表示されているのです
が、scrollbar を動かしたら、突然終了してしまいます。
以上、どのようにしたら良いでしょうか。
また、皆様のデバッグ方法などについて教えて下さい。
よろしくお願い致します。
--
*** メイルアドレス変わりました ***
近藤靖浩 <nkon / osk2.3web.ne.jp>
http://www2.osk.3web.ne.jp/~nkon/3web/
http://tsl.pe.u-tokyo.ac.jp/~kon/tslhome/
---- プログラムファイル
require "tkclass"
class Manager
def initialize
@windows = []
# 見えない root window を作成
@root = TkRoot.new
Tk.after 1000, Proc.new{@root.withdraw}
end
def newcreate
filename = "/CET_NEW_FILE."
filename += @windows.size
@windows += Cet.new(filename)
return @windows[@windows.size - 1]
end
def get_root
return @root
end
end
# cet.rb
class Cet
def initialize(filename)
@filename = filename;
# 窓の初期化
@toplevel = TkToplevel.new($manager.get_root)
@toplevel.title(@filename)
# Menu Bar
@menuframe = TkFrame.new(@toplevel, {"border" => 1, "relief" => "raised"})
print @menuframe.path, "\n" if $VERBOSE
# File Menu
@menu_file = TkMenubutton.new(@menuframe, {"text" => "File", "underline" => 0});
@menu_file_m = TkMenu.new(@menu_file, {"tearoff" => "no"})
@menu_file_m.add("command", \
{"label" => "New", "underline" => 0, \
"command" => proc{$manager.new}})
@menu_file.menu(@menu_file_m);
@menu_file.pack({"side" => "left"})
# Canvas Area
@canvasframe = TkFrame.new(@toplevel);
#print @canvasframe.path, "\n" if $VERBOSE
@canvas = TkCanvas.new(@canvasframe, {"bg" => "gray80", \
"width" => 600, "height" => 480, \
"scrollregion" => "0 0 600 480", \
"relief" => "raised", "border" => 1});
#print @canvas.path, "\n" if $VERBOSE
@h_scroll = TkScrollbar.new(@canvasframe, {"relief" => "sunken", \
"orient" => "horizontal", \
"command" => @canvas.yview});
print @h_scroll.path, "\n" if $VERBOSE
@v_scroll = TkScrollbar.new(@canvasframe, {"relief" => "sunken", \
"orient" => "vertical", \
"command" => @canvas.xview});
print @v_scroll.path, "\n" if $VERBOSE
@canvas.configure("xscrollcommand", @h_scroll.path+" set");
@canvas.configure("yscrollcommand", @v_scroll.path+" set");
@v_scroll.pack({"side" => "right", "fill" => "y"});
@h_scroll.pack({"side" => "bottom", "fill" => "x"});
@canvas.pack "fill" => "both", "expand" => "yes";
@menuframe.pack({"side" => "top", "fill" => "x"});
@canvasframe.pack({"side" => "top", "fill" => "both", "expand" => "yes"});
end;
end
# main
# アプリケーションマネージャの作成
$manager = Manager.new
$manager.newcreate # Cet アプリケーションの作成
Tk.mainloop