3

靴で、最初は非表示のボタンを作成したいと思います。ボタンスタイルの一部として :hidden => true を渡し、作成後に @button.hide() を呼び出してみましたが、頑固に表示されたままです。

表示するまでボタンを作成しないことでこれを回避できましたが、それを使用するだけでなく、既に存在するかどうかを確認する必要があります。

4

1 に答える 1

3

現在はありません。シューズ、特にWindowsでは、ボタンの信頼性はまだかなり低くなっています。ボタンをスロットに配置し、スロットを非表示または表示することで問題を回避できますが、ボタンを1回クリックすると、ボタンが再び非表示にならない場合があります。

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_buttonフローに基づいて構築されたボタンを生成できます。背景として画像を使用する、変更可能なテキスト(幅を自動拡張する?)、オンザフライでスタイルを変更する機能など、ニーズに合わせて変更できます。

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
于 2009-08-10T19:53:08.000 に答える