Perl Tk打开其他对话框

问题描述

include_once 'vendor/autoload.PHP';

use PHPseclib3\File\X509;
use PHPseclib3\Crypt\PublicKeyLoader;

$privKey = PublicKeyLoader::load(file_get_contents('/path/to/key.pem'),$password = false);

$x509 = new X509();
$x509->setPrivateKey($privKey);
$x509->setDNProp('id-at-organizationName','PHPseclib demo cert');

$csr = $x509->signCSR();

echo $x509->saveCSR($csr);

这个简单的perl产生/显示两个对话框,如何防止它出现?

解决方法

您发布的代码中有错误,因此无法编译。
从您的问题中可以理解,您想提供一个Dialog窗口,而不必同时打开MainWindow。 对于Tk应用程序,必须实例化一个Tk::MainWindow,以用作应用程序窗口层次结构中的根。但是,不需要实际显示此窗口。

如果您想隐藏MainWindow,可以像下面这样调用->withdraw

use strict;
use warnings;
use Tk;

my $mw= MainWindow->new;
$mw->withdraw;
my $response = $mw->messageBox(-title => 'Title',-message => 'Message',-type => 'YesNo',-icon => 'question',-default => 'yes'); 
print "$response\n";

请注意,直到用户单击按钮,messageBox调用才会阻塞。 MessageBox根据需要调用事件循环,因此您不必通过调用MainLoop()

来启动应用程序