linux - Perl gtk2 窗口更新

标签 linux perl unix window gtk2

最近我在用 perl 编写 gtk2 程序时遇到了一个小问题。我有一个主窗口,它使用标签和按钮中的变量来向用户显示一些数据。

my $label1 = Gtk2::Label->new ("IP ".$target_ip);
my $label2 = Gtk2::Label->new ("Port ".$target_port);
my $label3 = Gtk2::Label->new ("Threads ".$thread_number);

并且在用户更新 $target_ip 变量(通过弹出窗口)或我的主窗口中使用的任何其他变量之后没有任何反应,所以我的问题是我如何更新 Gtk2 中的窗口我已经尝试重新绘制它通过再次调用窗口函数,但由于某些原因,即使在发出 Gtk2->main_quit 之后,旧窗口函数仍然存在。我也知道这可能是一个蹩脚的问题,但我第一次使用 Gtk2 库来编写一个主要项目,我还不是真正的专家。 到目前为止,这是我的代码($ok 变量代表弹出窗口中的确定按钮,它更新主窗口中的其他变量)

$ok->signal_connect (clicked => sub {
        $target_ip = $text_area->get_text;
        Gtk2->main_quit; #Pop-up window
        main_Gtk()
        #Rebuild Attack window with given parameters / variables 

最佳答案

#!/usr/bin/perl
use strict;
use warnings;

use Glib qw/TRUE FALSE/;
use Gtk2 '-init';

my $window = Gtk2::Window->new('toplevel');
$window->signal_connect('delete_event' => sub { Gtk2->main_quit; });
$window->set_default_size(300, 200);


my $target_ip = '127.0.0.1';

my $label1 = Gtk2::Label->new ("IP ".$target_ip);

my $vbox = Gtk2::VBox->new(FALSE, 3);
$vbox->pack_start($label1, FALSE, FALSE, 4);

my $button = Gtk2::Button->new("Ok");
$vbox->pack_end($button, FALSE, FALSE, 4);

$button->signal_connect(clicked => sub {
    $target_ip = '88.88.88.88';
    $label1->set_label("IP ".$target_ip);  # That's what you need!!!
});

$window->add($vbox);
$window->show_all;

Gtk2->main();

关于linux - Perl gtk2 窗口更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14469108/

相关文章:

linux - Ubuntu 终端数据转换成 csv 文件

linux - 管道将输入拆分为命令

unix - 您如何写给pty大师Rust

linux - 有没有办法即时输出尾部?

linux - 在使用 ("6/16"时不能使用字符串 "strict refs") 作为哈希引用

regex - YAPE::Regex::Explain 不适用于 use 5.014;

c - C 和 Linux 中的时间测量

c - Debian 自动超时中的串行通信

linux - 什么 API 将允许我实现一个 linux 文件系统,它知道哪个进程正在访问它?

perl - 如何编写看起来不像 C 的 Perl?