3 Stimmen

Wie kann ich eine versteckte Schaltfläche in Shoes erstellen?

In Shoes möchte ich eine Schaltfläche erstellen, die zunächst ausgeblendet ist. Ich habe versucht, :hidden => true als Teil des Schaltflächenstils zu übergeben und @button.hide() nach der Erstellung der Schaltfläche aufzurufen, aber sie bleibt hartnäckig sichtbar.

Ich konnte dieses Problem umgehen, indem ich die Schaltfläche erst dann erstellte, wenn ich sie anzeigen lassen wollte, aber das erfordert eine Überprüfung, ob sie bereits existiert, anstatt sie einfach zu verwenden.

3voto

Pesto Punkte 23518

Gegenwärtig nicht. Schaltflächen sind in Schuhen immer noch ziemlich unzuverlässig, besonders unter Windows. Sie können das Problem umgehen, indem Sie die Schaltfläche in einen Schlitz setzen und den Schlitz ein- oder ausblenden, aber Sie werden feststellen, dass sich die Schaltfläche nicht mehr ausblenden lässt, sobald sie einmal angeklickt wurde:

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

Glücklicherweise gibt es einen Ausweg: Spielautomaten. Schlitze können mit einem Klick-Ereignis versehen werden, wodurch sie sich ähnlich wie eine Schaltfläche verhalten. In der Tat können Sie ziemlich anständige Tasten aus Slots machen.

Hier ist etwas, das ich zusammengeschustert habe. Damit können Sie die pesto_button Methode, um Schaltflächen zu erzeugen, die auf Flüssen basieren. Sie können sie an Ihre Bedürfnisse anpassen, z. B. mit einem Bild als Hintergrund, veränderbarem Text (mit automatisch expandierender Breite?), der Möglichkeit, Stile im laufenden Betrieb zu ändern, usw:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X