【问题标题】:How can I get when the button is clicked?单击按钮时如何获取?
【发布时间】:2015-12-16 17:44:31
【问题描述】:

我将 wxwidget 与 erlang 一起使用。

init() ->
    Wx=wx:new(),
    F=wxFrame:new(Wx, -1, "Hello, World!"),
    Panel = wxPanel:new(F),
    wxButton:new(Panel, 12, [{label,"Default"}]),
    wxFrame:show(F).

如果我点击按钮什么都没有做,我想做点什么,例如执行一个函数。我该怎么做?

谢谢 最好的问候

【问题讨论】:

  • 请更清楚您在寻找什么,我们可以尽力提供帮助。
  • 在我的代码中,我有一个按钮,如果有人点击该按钮,我想执行一些东西,例如一个函数。

标签: erlang wxwidgets


【解决方案1】:

这是 shell 中的一个示例。

首先,创建一个带有按钮的窗口,您已经拥有该按钮:

1> Wx = wx:new().
{wx_ref,0,wx,[]}
2> Frame = wxFrame:new(wx:null(), -1, "Hello, World!").
{wx_ref,35,wxFrame,[]}
3> 
3> Panel = wxPanel:new(Frame).
{wx_ref,36,wxPanel,[]}
4> 
4> Button = wxButton:new(Panel, 12, [{label,"Default"}]).
{wx_ref,37,wxButton,[]}

现在您可以注册回调了。在这种情况下,我只是打印出传递给回调的数据:

5> wxButton:connect(Button, command_button_clicked, [{callback,
5>         fun(Evt, Obj) ->
5>             io:format("click~n  event = ~p~n  obj = ~p~n", [Evt, Obj])
5>             end
5>         }]).
ok

显示窗口:

6> wxFrame:show(Frame).
true
7> 

现在,当您单击按钮时,您应该会看到:

click
  event = {wx,12,
              {wx_ref,37,wxButton,[]},
              [],
              {wxCommand,command_button_clicked,[],0,0}}
  obj = {wx_ref,39,wxCommandEvent,[]}
7> 

编辑(有关 OTP 的注释):

当你用 wx 实现一个更完整的 OTP 风格的应用程序时,你可能想做一些稍微不同的事情,因为你不希望那种乐趣四处游荡。相反,您可以在单击按钮时向您发送一条消息。如果你省略了连接的“回调”选项,那么事件将被传递给调用连接的进程。所以你可以这样做:

5> wxButton:connect(Button, command_button_clicked, []).
ok

如果您这样做并单击按钮,您的(在本例中为外壳)进程将收到一条消息:

7> receive Msg -> Msg after 0 -> timeout end.
{wx,12,
    {wx_ref,37,wxButton,[]},
    [],
    {wxCommand,command_button_clicked,[],0,0}}
8> 

【讨论】:

    【解决方案2】:

    附加的链接解释了如何使用 wxWidgets 处理一般事件,但它也讨论了 wxbutton 及其点击事件。那里也有一些示例代码。希望这会有所帮助。

    wxWidget Event Handling

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2021-12-08
      • 2020-05-15
      相关资源
      最近更新 更多