Perl Tkx를 사용하여 사용자로부터 입력을 받고, 창을 닫고, 나중에 다시 할 수 있습니다. 사용자 입력을 위해, 나는 단지 몇 개의 버튼을 표시하고 있고, 사용자는 그 중 하나를 클릭한다. 버튼 중 하나에어떻게 Tkx로 사용자에게 반복적으로 프롬프트 할 수 있습니까?
sub prompt_user {
my $answer;
my $mw = Tkx::widget->new("."); ## the main window is unavailable the second time
$mw->g_wm_title("Window Title"); ## line 40
$mw->g_wm_minsize(300, 200);
my $label = $mw->new_label(-text => "Question to the user?");
$label->g_pack(-padx => 10, -pady => 10);
my $button1 = $mw->new_button(
-text => "Option One",
-command => sub { $answer = 0; $mw->g_destroy; },
);
$button1->g_pack(-padx => 10, -pady => 10);
my $button2 = $mw->new_button(
-text => "Option Two",
-command => sub { $answer = 1; $mw->g_destroy; },
);
$button2->g_pack(-padx => 10, -pady => 10);
Tkx::MainLoop(); ## This blocks until the main window is killed
return $answer;
}
따라서 사용자가 클릭)을 (윈도우, prompt_user을 닫고, 0 또는 1 (이 버튼을 사용자가 클릭 따라) 반환하고 실행이 계속 : 여기에 내가 지금 무슨이다. 사용자에게 다시 묻기 전까지 그 때 나는 오류 얻을 :
can't invoke "wm" command: application has been destroyed at MyFile.pm line 40
난 그냥 원하는 사용자가 클릭되는 하나보기 위해 기다릴 수, 하나를 클릭하자, 버튼을 잔뜩 넣어하는 방법을, 어쩌면 나중에 다시 그것을 할. 메인 윈도우를 파괴하지 않고 버튼 클릭에 대한 응답을 기다릴 수있는 방법이 있습니까? 아마도 서브 윈도우를 만들 수 있을까요?
나는 Tkx를 처음 사용하는데, 위의 코드 (MainLoop/g_destroy 사용)와 같은 간단한 예제가 많이 있지만, 창을 다시 만들지는 못했습니다. 대화 상자 또는 메시지 상자에 대한 정보를 보았지만 내 필요에 맞지 않습니다. 버튼에 텍스트를 넣고 임의의 수의 버튼을 사용하고 싶습니다 (예/아니요/취소로 제한하고 싶지 않고 3 가지 옵션 만 가질 수 있습니다).
업데이트 는 여기에 내가
# hide the main window, since I'm not using it
my $mw = Tkx::widget->new(".");
$mw->g_wm_withdraw();
# function to prompt the user to answer a question
# displays an arbitrary number of answers, each on its own button
sub prompt {
my $prompt = shift;
my $list_of_answers = shift;
# Note: the window name doesn't matter, as long as it's './something'
my $answer = Tkx::tk___dialog("./mywindowpath", # window name
"Prompt", # window title
$prompt, # text to display
undef, # tk bmp library icon
undef, # default button
@$list_of_answers); # list of strings to use as buttons
return $answer;
}
# use the button to ask a question
my $index = prompt("Who was the best captain?",
[ "Kirk", "Picard", "Cisco", "Janeway", "Archer" ]);
더 나은 응답을 얻으려면 tk 태그가 추가되었습니다. – slebetman
가끔 GUI 요소를 팝업하는 명령 줄 프로그램 (예 : GUI 없음)을 작성하려고하십니까?그것은 가능하지만 어색합니다. –
@Michael - 예, 그게 내가하려는 일입니다. 그렇습니다. 어색하게하는 것 같습니다. – Tim