尝试将ActivePerl (在Windows上)移植到CENTOS环境。我惊讶地发现perl Tkx模块在ActivePerl之外并不常见,必须从CPAN安装,而且它实际上没有通过测试。
总之,我制作了一个qemu并在其上安装了Centos 8。然后,我想看看是否可以让Tkx模块在上面工作。
根据这个博客的建议,我通过yum安装了一些东西,并通过CPAN程序从cpan加载了Tcl和Tkx模块。(正是PERL_DL_NONLAZY环境问题激发了他在博客上发表自己的解决方案。)
为了测试它,我尝试了这个程序
#
BEGIN {
$ENV{PERL_DL_NONLAZY} = 1;
}
use Tkx;
Tkx::button(".b",
-text => "Hello, world",
-command => sub { Tkx::destroy("."); },
);
Tkx::pack(".b");
Tkx::MainLoop()但是运行这个程序有一些意想不到的行为。当mobaxterm运行ssh会话并在其上转发X11时,它似乎可以工作。但是,在模拟显示中打开一个shell,并运行程序(它应该出现在模拟显示上),而是在虚拟显示的右上方放置一个几乎为零大小的小部件。您可以更好地将其拖到桌面上,并将窗口侧拖动以使其更大。这显示了窗口标题栏中的标题。但是按钮所在的地方,只是一个点,这显然就是按钮,因为如果你点击它,程序就会结束,就像点击“HELLO WORLD”按钮一样。
我无法解释为什么这个小部件在直接X11上显示的大小不适当,而它在隧道X11上似乎工作正常。
增编:从调试器运行这一行
x Tkx::font_actual('TkTextFont')报告两个环境中的差异。
通过ssh,它基本上是-size=>9,而在本机下是-size=>0。
因此,我将检查字体'DejaVu Sans‘是否在本地安装
发布于 2020-11-28 00:38:09
Deja字体安装在Centos 8中,但是当Tk访问它们时,它们的大小被设置为零。
我不知道系统是否有办法为它们设置默认大小,但作为一项工作,我已经创建了一些代码,可以将零大小的Tk字体更改为一些正常值,如下所示
#
BEGIN {
$ENV{PERL_DL_NONLAZY} = 1;
}
use Tkx;
# Get the names of Tk's fonts
my @fontnames = Tkx::SplitList( Tkx::font_names() );
# resize zero sized Tk fonts to 9 points
foreach( @fontnames)
{
my %actual = Tkx::SplitList( Tkx::font_actual($_) );
if ( $actual{-size} == 0 )
{
Tkx::font_configure( $_, -size=>9 );
}
}
Tkx::button(".b",
-text => "Hello, world",
-command => sub { Tkx::destroy("."); },
);
Tkx::pack(".b");
Tkx::MainLoop()https://unix.stackexchange.com/questions/621864
复制相似问题