Perl和X Window中没有事件循环图形?
在20世纪80年代的Apple II BASIC上,您将使用“HGR”进入屏幕,“HCOLOR”将设置颜色,“HPLOT”将绘制点.您还可以操作屏幕字节数据,而不必将程序控制交给任何事件处理程序.今天,每种语言和每个图书馆似乎都缺少这种荒谬的基本功能.
所以我用C语言编写了一个小型库,使用X Window API:HGR(x,y)设置XWindow,HCOLOR(i)设置颜色,HPLOT(i,j)绘制一个点,再加上你提取窗口的位图,可以修改它并显示修改过的东西.这不是直截了当的,我不想再次通过它. 我现在正在使用Perl做一些事情,我需要Perl这样的工具,你可以调用一个子程序,最好在没有产生新线程的情况下返回,输出一个窗口,你可以在窗口中添加图形内容,以及在您的程序感觉它时查询事件.这是1980年代BASIC的功能,所以它应该不难.但是我看到的工具没有这样做: > GD:据我所知,这会产生图形文件,而不是图形窗口.看来你需要把它管道到另一个程序. 有没有人知道如何从正在运行的应用程序中放置一个XWindow,而不需要一个GUI应用程序进程,在这里您可以在窗口中绘制原始内容,如点和线,以及您可以按照自己的计划查询窗口事件的位置?我简要地看了一下Perl的X Window API,它和C一样可怕,并且将C代码与Perl连接起来也是可怕的.如有必要,我会这样做.但也许不是. Perl有没有HGR? 如果您想知道我的意思,没有事件循环图形库,请参阅this linked paper,遗憾的是C语言.这对于科学的东西非常有用,除了介绍性编程类之外. 解决方法
几乎每个GUI工具包都支持构建窗口而无需进入事件循环.这是tk的例子
#!/usr/bin/perl -- use strict; use warnings; use Tk; my $mw = tkinit(); my $ca = $mw->Canvas( background => 'white' )->pack(qw/-expand 1 -fill both /); $mw->geometry( '500x600+10+10' ); for my $cc ( { red => &;red,green => &;der,blue => &;erd },{ green => &;red,red => &;der,blue => &;der,red => &;erd },) { $ca->delete('all'); my %color = %$cc; for my $fill ( keys %color ) { my $red = $color{$fill}; for my $t ( 10 .. 220 ) { my $d = 0.1; my ( $x,$y ) = $red->( $t,0.1 ); $_ += 250 for $x,$y; $ca->createOval( $x,$y,( $t * 2 * $d ) + $x,( $t * 2 * $d ) + $y,-fill => $fill,); $mw->update; select undef,undef,0.001; } $mw->update; } } Tk::DoOneEvent(0) while Tk::MainWindow->Count; ## MainLoop; exit 0; sub red { my ( $t,$d ) = @_; my $x = $t * sin( $t * $d ); my $y = $t * cos( $t * $d ); $x,$y; } sub der { my ( $t,$d ) = @_; my $x = $t * sin( $t * $d ); my $y = $t * cos( $t * 2 * $d ); $x,$y; } sub erd { my ( $t,$d ) = @_; my $x = $t * sin( $t * 2 * $d ); my $y = $t * cos( $t * $d ); $x,$y; } __END__ Gtk2和Wx都支持相同的功能,它可以更新/显示/显示……并且可以绘制窗口,当您需要用户交互时,您可以调用MainLoop或运行应用程序或自己处理它,它只是一个while循环调度待定事件 wxTheApp->Dispatch while wxTheApp->Pending; Gtk2->main_iteration while Gtk2->events_pending; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |