• 締切済み

Perl/Tkで、Entryが上手く扱えません

GUIプログラミングを始めようと思い、Perlを少しかじっていることもあり、Perl/Tkを選びました。CentOS5にソース(Tk-804.027.tar.gz)からインストールを行い、オライリーの「入門Perl/Tk」に沿って勉強しています。 順調に各ウィジェットを使えていますが、Entryに関しては上手くいっていません。 以下のようなプログラムで問題が起こります。 01 #!/usr/bin/perl -w 02 03 use Tk; 04 05 $buffer = ""; 06 07 $top = MainWindow->new(); 08 09 $top->Entry( -textvariable => \$buffer )->pack(); 10 $top->Button(-text => "EXIT", -command => sub { exit })->pack(); 11 MainLoop; 状況としては、9行目で作成されるエントリが文字入力を受け付けてくれないのです。 しかし、10行目のボタンを作成するプログラムを削除すると入力を受け付けてくれます。 widgetコマンドで見られるサンプルも一部は入力できますが、すべてのエントリに入力できるものはありませんでした。 どなたか原因のわかる方、よろしくお願いします。

  • Perl
  • 回答数3
  • ありがとう数7

みんなの回答

回答No.3

手当たり次第に試してみた方法ですが参考になれば。 環境変数のXMODIFIERが    XMODIFIERS="@im=SCIM" となっていないでしょうか。    XMODIFIERS="@im=none" に設定しなおして(export XMODIFIERS="@im=none")、perlを実行してみてください。 我が家のFedora8(Perl-5.10.0 Tk-804.028)でも同様の状態が起こりまして... #!/usr/bin/perl use Tk; $mw = MainWindow->new(); $mw->Entry(-textvariable=>\$t1)->pack; $mw->Entry(-textvariable=>\$t2)->pack; MainLoop; とすると、後のEntryには入力できますが先のEntryは入力できません。 これを上述のように変更すると入力できるようになりました。 たぶんSCIMを使わないシステムでは起こらないのでしょうね。 perlのbugですかね?仕様、だったりして。

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.2

Windows XP/ActivePerl と Ubuntu (6.06) で試しましたが、エラーが再現できないので解決策が提示できません・・・ 同じことですが、 $top->Button(-text => "EXIT", -command => \&exit )->pack(); ともできます。 お役に立てずすみません。

downboy
質問者

お礼

いろいろとお骨を折っていただきまして、ありがとうございます。 もう少し調べてみようと思います。

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.1

実行したところ10行目の exit の後の全角スペースが引っかかたので、それを削除したら入力できました。

downboy
質問者

補足

早速のご回答ありがとうございます。 もうしわけありませんが。これは私のミスです。 実際には半角です。 また、別のマシン(ubuntu)に apt-get install perl-Tk で導入してみましたがこれも同様の状態です。 Linux環境が問題なのでしょうか。

関連するQ&A

  • Perl/Tk Entry に対して見出しを付けたい

    Win-XP,Active-Perl(v5.8.6)利用です。 複数のインプットボックスを持つ、 ┌────────────┐ │   ┌───────┐│ │品名:│       ││ │   └───────┘│ │   ┌───────┐│ │科目:│       ││ │   └───────┘│ │   ┌───────┐│ │価格:│       ││ │   └───────┘│ │ ┌──┐┌─────┐│ │ │OK││キャンセル││ │ └──┘└─────┘│ └────────────┘ こんな感じのウィンドウを作りたいのですが、 (図が崩れているかも知れませんが大体のイメージで・・・) ======================================== use Tk; $top = new MainWindow; $arg[0] = $top->Entry(-title=>'品名:')->pack; $arg[1] = $top->Entry(-title=>'科目:')->pack; $arg[2] = $top->Entry(-title=>'価格:')->pack; $b[0] = $top->Button(-text=>'OK',-command=> [\&exec,\@arg])->pack; $b[1] = $top->Button(-text=>'キャンセル',-command=> [\&exec,(-1)])-pack; ======================================== unknown option "-title" at C:\Perl\site\lib/Tk/Widget.pm Entryに対するオプションが分かりませんでした。 もしくは、Label や Message を組み合わせて実現するものでしょうか。 あと、実際に図のような配置でフォームを作りたい場合、 Buttonの部分の書き方はどのようにすれば良いですか? 以上、ご存知の方、ご教示よろしくお願い致します。

    • ベストアンサー
    • Perl
  • perl/tkで日本語を表記したいのですがうまくいきません。

    perl/tkについての質問です。 ラベルウィジェットに日本語を表記したいのですが、ご存知の方教えて下さい。 -text=>"ファイル名" のファイル名が文字化けしてしまいます。 ------------------------------------------- #!c:\perl\bin\perl.exe use Tk; $top = MainWindow->new(); $top->title("test"); $font=['MS ゴシック', 11, 'normal']; #ファイル名 $lb_f=$top->Label(-font=>$font, -text=>"ファイル名")->grid(); MainLoop(); -----------------------------------------------------------

  • perl/tk のScrollbarとジオメトリー

    Tk::Tilerを教えてもらってスクロールバーを配置できたのですが、ジオメトリーマネージャでpack,gridを使って、配置できる方法を知りたいのですが。 ----------------------------------------------- use Tk; use Tk::Tiler; $top = MainWindow->new(); $top0 = $top->Tiler()->pack(); $top->AddScrollbars($top0); $top->configure(\'-scrollbars\' => \'w\'); #ボタン $button_1 = $top0->Button( -text => \"1\")->grid(); $button_2 = $top0->Button( -text => \"2\")->grid(); .... $button_6 = $top0->Button( -text => \"6\")->grid(); $button_11 = $top0->Button( -text => \"11\" ); $button_12 = $top0->Button( -text => \"12\" ); $button_13 = $top0->Button( -text => \"13\" ); ...... $button_16 = $top0->Button( -text => \"16\" ); $button_11->grid($button_12,....,$button_16); $button_21 = $top0->Button( -text => \"21\" ); $button_22 = $top0->Button( -text => \"22\" ); ........ $button_26 = $top0->Button( -text => \"26\" ); $button_21->grid($button_22,......,$button_26); $top0->Manage($button_1,$button_2,$button_3,$button_4,$button_5,$button_6); $top0->Manage($button_11,$button_12,$button_13,$button_14,$button_15,$button_16); $top0->Manage($button_21,$button_22,$button_23,$button_24,$button_25,$button_26); $top0->update; $top0->focus; MainLoop();

    • ベストアンサー
    • Perl
  • perl/tk のScrollbarについて

    下のように縦にボタンを100個配置した場合、どのようにスクロールバーを設定するのですか?表現がまずいかもしれませんが、MainWindowの縦にスクロールバーを配置したいのですが、方法がわかりません。 -------------------------------------------------------- #!c:\perl\bin\perl.exe use Tk; $top = MainWindow->new(); #ボタン $button_1 = $top->Button( -text => "ボタン1",-command => \&filemake ) ->grid(); $button_2 = $top->Button( -text => "ボタン2",-command => \&filemake ) ->grid(); $button_3 = $top->Button( -text => "ボタン3",-command => \&filemake ) ->grid(); $button_4 = $top->Button( -text => "ボタン4",-command => \&filemake ) ->grid(); $button_5 = $top->Button( -text => "ボタン5",-command => \&filemake ) ->grid(); $button_6 = $top->Button( -text => "ボタン6",-command => \&filemake ) ->grid(); . . . $button_99 = $top->Button( -text => "ボタン99",-command => \&filemake ) ->grid(); $button_100 = $top->Button( -text => "ボタン100",-command => \&filemake ) ->grid(); MainLoop();

    • ベストアンサー
    • Perl
  • Perl/Tkで変数名を使って一気にウィジェットを配置できますか

    Perl/Tkでforやforeachを使って、ウィンドウ上にウィジェットを一括配置したいのです。 my $window = new MainWindow; for (my $i=0; $i<10; ++$i) {$window->Entry->pack;} みたいにして一括作成はできるのですが、作ったウィジェットを後で使うために、これらのウィジェット名に名前をつけながら配置したいです。 上記のコードの場合、後から ent1->get; のように参照できるようにしたいと思っております。 こういったことは可能でしょうか。またその方法があれば手順を示していただけると助かります。 詳しい人には馬鹿にされそうな文ですが、 $ent$i = $window->Entry->pack;では駄目でした。。。

    • ベストアンサー
    • Perl
  • Perl/Tk Entryから日本語入力

    Entry ウィジェットからの日本語入力方法が分かりません。。。 環境は、 Windows XP ActivePerl v5.8.8 です。 $fr11->Entry(-textvariable=>\$a)->pack(); print STDOUT decode("shiftjis",$a); として、GUIから$aに日本語を入力しますが、標準出力には、何も表示されません。。。 どなたか解決策を教えてください。

    • ベストアンサー
    • Perl
  • 【Perl/Tk】Photo メソッド に渡すファイル名に2バイト文字コードを指定するには?

    Windows-XP上で、ActivePerl This is perl, v5.8.6 built for MSWin32-x86-multi-thread を使用しています。 次のようなPerl/Tk スクリプトで、例えば、デスクトップ上にあるJPG画像ファイルを キャンバスに表示させようとしますが、2バイト文字コードを含むファイル名やパス名だとエラーが出て上手く行きません。 use Tk; use Tk::JPEG; my $fn = $ARGV[0]; my $mw = MainWindow->new; my $cv = $mw->Canvas()->pack(); if(-e $fn){ my $ph = $mw->Photo(-format=>'jpeg',-file=>$fn); $cv->createImage(64,64,-image=>$ph); } MainLoop; ------------------------------------------------- エラー例: Cannot open 'C:\Documents and Settings\guest\テつデテつステつクテつトテつッテつプ\aaa.jpg' in mode 'r' at C:\Perl\site\lib/Tk/Image.pm line 21. 2バイト文字コードを含まないファイル名(例:C:\aaa.jpg)などを指定した場合は、 無事にキャンバスに画像が表示されています。 また、ファイル名に2バイト文字コードが含まれる場合でも、 ifの判定文でファイル存在確認が機能していますので、 Photoメソッド側の問題と思われるのですが、 他に、このファイル名をutf8やeucjpへencode/decodeしてみるなど色々なパターンで試してみたのですが、 どうやってもエラーになってしまいます。 Photoメソッドには、そもそも2バイト文字コードを含むファイル名の利用は出来ない仕様でしょうか。 その他、よい回避方法などがありましたら、お教えください。 よろしくお願い致します。

  • ActivePerl/Tk で dumpが勝手に

    perl, v5.8.6で、Perl/Tkを利用した環境です。 従来は、Windows-XP(x32)で利用していて、特に問題なかったのですが、 同じ環境をWindows7(x32)に導入して利用しようとしたところ、 Menu メソッド呼び出しのところで、ちょうど Devel::peekのdumpで表示させた ような内容のものが、DOSプロンプト上に出てしまいます。 ↓こちらの記事(英文)に書かれていることも試してみましたが、解決できませんでした。 http://community.activestate.com/forum-topic/perl-tk-cause-warning Windows7だからということではなさそうですが、 この表示が出てしまう原因、出さなくする方法について、教えてください。 何かご存知の方、よろしくお願い致します。 サンプルスクリプト: test.pl ----------------------------- use strict; use Tk; my $mw = MainWindow->new(); my $menu = $mw->Menu(); MainLoop; ----------------------------- このスクリプトをWindows7環境上で実行すると、 MainWindowのダイアログは画面に正しく表示されていますが、 DOSプロンプトで、下記のメッセージも出てしまいます。 ⇒4行目(my $menu = $mw->Menu();)をコメントアウトするとこの表示は出ません。 ----------------------------- C:\Perl\Tk\Win7>test.pl @ 535 not utf8 SV = PV(0x3d4f9d0) at 0x3d53870 REFCNT = 2 FLAGS = (POK,pPOK,UTF8) PV = 0x3d0d9e4 "\203\201\203C\203\212\203I 9"\0 [UTF8 "\x{c1}C\x{c3}C\x{ca}\x{283}\x{c9}I 9"] CUR = 10 LEN = 11 SV = PVMG(0x214bf74) at 0x3d53870 REFCNT = 2 FLAGS = (SMG,POK,pPOK,UTF8) IV = 0 NV = 0 PV = 0x3d0d9e4 "\203\201\203C\203\212\203I 9"\0 [UTF8 "\x{c1}C\x{c3}C\x{ca}\x{283}\x{c9}I 9"] CUR = 10 LEN = 11 MAGIC = 0x3d5d5a4 MG_VIRTUAL = &PL_vtbl_utf8 MG_TYPE = PERL_MAGIC_utf8(w) MG_LEN = 10

    • ベストアンサー
    • Perl
  • MovableType3.2のエントリーが出来ない

    エントリーで日本語を入力後、保存を行ったときに 「アップデート中にSQLエラーが発生しました: Data too long for column 'entry_title' at row 1 」 が表示され、保存が出来ない。 アルファベットのみの入力を行うと、正常に保存されます。 しかし「サイトの確認」を行うと構築がされておらず、「あなたのサイトをよりアクティブに、よりクリエイティブに。次世代ウェブツール "Movable Type" へようこそ ログイン」初期画面が表示されます。 環境は、自分のパソコン(Windows2000SP4)に Apache2.0 ActivePerl5.8.7 MySQL5.0 DBD::MYSQLモジュール MT3.2 をインストールしています。 ファイル場所などは、設定どおりの場所に保存しています。 ●httpd.confファイルの内容 228行目 DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs" 515行目 ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache2/cgi-bin/" 521行目 <Directory "C:/Program Files/Apache Group/Apache2/cgi-bin"> 765行目 AddHandler cgi-script .cgi .pl ●mt-config.cgiファイルの内容 28行目 CGIPath http://localhost/mt/ 35~39行目 ObjectDriver DBI::mysql Database mt_db DBUser yagi DBPassword asspie11 DBHost localhost 70行目 # DataSource /www/db 90行目 StaticWebPath http://localhost/mt/mt-static 272行目 PublishCharset shift_jis ●CGIファイルの内容 全ファイル1行目 #!C:/Perl/bin/perl -w

    • 締切済み
    • CGI
  • CGI/Perlでメールフォームを作るには。

    CGI/Perlでメールフォームを作るにはHPのトップページ(ソースコード)にCGI/Perlのプログラムを入力すればメールフォームは使用できるようになるのでしょうか? よろしくお願いします。

    • 締切済み
    • CGI

専門家に質問してみよう