Ruby 如何在鞋子中创建隐藏按钮?

Ruby 如何在鞋子中创建隐藏按钮?,ruby,shoes,Ruby,Shoes,在Shoes中,我想创建一个最初隐藏的按钮。我曾尝试将:hidden=>true作为按钮样式的一部分传递,并在创建@button.hide()后调用它,但它始终可见 我可以通过不创建按钮来解决这个问题,直到我希望它显示出来,但这需要检查它是否已经存在,而不仅仅是使用它。目前还没有。鞋子上的纽扣仍然相当不可靠,尤其是在窗户上。您可以通过将按钮放入插槽中并隐藏或显示插槽来解决此问题,但您可能会发现按钮单击一次后不会再次隐藏: Shoes.app do para 'This is some tex

在Shoes中,我想创建一个最初隐藏的按钮。我曾尝试将:hidden=>true作为按钮样式的一部分传递,并在创建@button.hide()后调用它,但它始终可见


我可以通过不创建按钮来解决这个问题,直到我希望它显示出来,但这需要检查它是否已经存在,而不仅仅是使用它。

目前还没有。鞋子上的纽扣仍然相当不可靠,尤其是在窗户上。您可以通过将按钮放入插槽中并隐藏或显示插槽来解决此问题,但您可能会发现按钮单击一次后不会再次隐藏:

Shoes.app do
  para 'This is some text.'

  @flow = flow :width => 50, :hidden => true do
    button 'a' do |btn|
      alert 'Hello, World!'
    end
  end

  button 'toggle' do
    @flow.toggle
  end
  para 'Blah blah blah'

end
幸运的是,有一条出路:吃角子老虎。可以给插槽一个单击事件,这使它们的行为与按钮一样。事实上,您可以用插槽制作相当不错的按钮

这是我拼凑的东西。它允许您使用
pesto_按钮
方法生成基于流的按钮。您可以根据需要对其进行修改,包括使用图像作为背景、可修改文本(具有自动扩展宽度?)以及动态更改样式等:

class PestoButton < Widget
  def initialize (text, opts = {})
    @border_color = opts[:border_color] || gray
    @border_width = opts[:border_width] || 3
    @color = opts[:up_color] || gainsboro
    @click_color = opts[:down_color] || @border_color
    @width = opts[:width] || 80
    @click = block_given? ? Proc.new { yield } : nil
    @text = text
    @visible = true
    @flow = flow :width => @width do
      background @color
      border @border_color, :strokewidth => @border_width
      para @text, :align => 'center'
    end

    @flow.click do
      @flow.clear
      @flow.append do
        background @click_color
        border @border_color, :strokewidth => @border_width
        para @text, :align => 'center'
      end
    end

    @flow.release do
      @flow.clear
      @flow.append do
        background @color
        border @border_color, :strokewidth => @border_width
        para @text, :align => 'center'
        @click.call if @click
      end
    end
  end

  def click
    @click = block_given? ? Proc.new { yield } : nil
  end

  def show
    @flow.show
  end

  def toggle
    @flow.toggle
  end

  def hide
    @flow.hide
  end
end

Shoes.app do
  para 'This is some text.'
  @btn = pesto_button 'Click me!' do
    alert 'Hello, World!'
  end

  button 'toggle' do
    @btn.toggle
  end

  button 'new block' do
    @btn.click do
      alert 'Goodbye, World!'
    end
  end

  button 'no block' do
    @btn.click  #Clears the click method
  end

  para 'Blah blah blah'
end
class PestoButton@width do
背景@颜色
边框@border\u颜色:strokewidth=>@border\u宽度
para@text,:align=>“居中”
结束
@flow.click-do
@流动,清除
@flow.do
背景@点击颜色
边框@border\u颜色:strokewidth=>@border\u宽度
para@text,:align=>“居中”
结束
结束
@释放
@流动,清除
@flow.do
背景@颜色
边框@border\u颜色:strokewidth=>@border\u宽度
para@text,:align=>“居中”
@单击。如果@click,则调用
结束
结束
结束
def点击
@单击=给定的块?Proc.new{yield}:nil
结束
def秀
@流动表演
结束
def开关
@流量开关
结束
def皮
@隐藏
结束
结束
Shoes.app do
这是一段文字
@btn=pesto_按钮“点击我!”做
“你好,世界!”
结束
按钮“切换”按钮
@切换开关
结束
按钮“新建块”do
@点击做
“再见,世界!”
结束
结束
按钮“无阻塞”执行
@btn.click#清除单击方法
结束
“胡说八道”
结束