【问题标题】:Executing commands using Button widget in Perl-Tk在 Perl-Tk 中使用 Button 小部件执行命令
【发布时间】:2011-08-12 18:13:32
【问题描述】:
#!/usr/local/bin/perl
use Tk;
# Main Window
$mw = new MainWindow;
$label = $mw -> Label(-text=>"Hello World") -> pack();
$button = $mw -> Button(-text => "Quit",
                -command => sub { exit }) -> pack();
MainLoop;

在此代码中,当按下按钮 $button 时,它会关闭程序。因为它执行了退出命令。我想修改代码,以便当用户单击按钮时,它将刷新 iptables 规则 (iptables -F)。我该怎么做?

我试过了:

$button = $mw -> Button(-text => "Flush the rules",
                    -command => system ( iptables -F )) -> pack();

为什么这不起作用?我是否必须为它创建一个子程序(然后在那里编写iptables -F 命令)然后调用该子程序?不能像上面代码那样直接输入命令吗?

【问题讨论】:

    标签: linux perl perltk


    【解决方案1】:

    您需要指定一个代码引用 - 一个回调 - 将在按下按钮时执行,所以是的,您应该将系统调用放在 sub { } 中。

    您所写的是在定义 Button 时对 system() 的调用,因此您将 system() 的返回值指定为回调的 coderef - 这是行不通的。 system() 函数将在定义 Button 时调用,而不是在按下时调用 - 这不是您想要的。

    【讨论】:

    • @定义Button时会调用system()函数。你的意思是,如果我执行程序,那么规则将在定义 Button 时刷新,对吧?
    • 我有一个similar questionThis post详述马丁的解释
    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 2013-10-31
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多