質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

1回答

704閲覧

perl/Tkのボタンメソッドのコマンドオプションがわからない

yukikona

総合スコア12

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2020/06/07 05:12

前提・実現したいこと

a,c,cというボタンを作成し,例えばaを押すとa was pressed!というのがアウトプットされるプログラムを作りたい

発生している問題・エラーメッセージ

プログラムを開始した時点でボタンを押していないのに a was pressed! b was pressed! c was pressed! と表示される ボタンを押すと Tk::Error: Undefined subroutine &main::1 called at /usr/local/ActivePerl-5.28/lib/perl5/site_perl/5.28.1/darwin-thread-multi-2level/Tk.pm line 251. Tk callback for .button Tk::__ANON__ at /usr/local/ActivePerl-5.28/lib/perl5/site_perl/5.28.1/darwin-thread-multi-2level/Tk.pm line 251 Tk::Button::butUp at /usr/local/ActivePerl-5.28/lib/perl5/site_perl/5.28.1/darwin-thread-multi-2level/Tk/Button.pm line 175 <ButtonRelease-1> (command bound to event) とでます

該当のソースコード

perl/Tk

1#!/usr/local/bin/perl 2use strict; 3use warnings; 4use Tk; 5 6my @names=("a","b","c"); 7my $mw = MainWindow->new(); 8 $mw->title("Button Demo"); 9foreach $_ (@names) { 10 $mw->Button(-text => $_, 11 -command => print_name($_))->pack(); 12 } 13 sub print_name { 14 print "$_[0] was pressed!\n"; 15 } 16 17MainLoop();

試したこと

おそらくcommandオプションのサブルーチンの呼び出し方が良くないのかもしれません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

-command => ...で指定するべきは「関数へのリファレンス」ですね。このコードではそうなっていません。

以下の記事のコーディング例(「コールバックへの引き数を規定する」のあたり
)が参考になると思います。
https://www.ibm.com/developerworks/jp/linux/library/l-ptkwidg/index.html

質問とは直接関係ないですが、インデントや改行のつけ方が適当すぎます。コードのチェックがえらくやりづらかったと述べておきます。模範コードを見て規則正しく書いてください。それだけで変なバグをかなり阻止できます。

投稿2020/06/07 05:35

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問