電子書籍の厳選無料作品が豊富!

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コマンドで見られるサンプルも一部は入力できますが、すべてのエントリに入力できるものはありませんでした。

どなたか原因のわかる方、よろしくお願いします。

A 回答 (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ですかね?仕様、だったりして。
    • good
    • 0

Windows XP/ActivePerl と Ubuntu (6.06) で試しましたが、エラーが再現できないので解決策が提示できません・・・



同じことですが、
$top->Button(-text => "EXIT", -command => \&exit )->pack();
ともできます。

お役に立てずすみません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/12/20 00:56

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

この回答への補足

早速のご回答ありがとうございます。

もうしわけありませんが。これは私のミスです。
実際には半角です。

また、別のマシン(ubuntu)に
apt-get install perl-Tk
で導入してみましたがこれも同様の状態です。
Linux環境が問題なのでしょうか。

補足日時:2007/12/18 21:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!