2009-08-10 66 views
3

在Shoes中,我想創建一個最初隱藏的按鈕。我試過了:hidden => true作爲按鈕樣式的一部分,並且在創建它之後調用@ button.hide(),但它仍然頑固地可見。如何在鞋子中創建隱藏按鈕?

我已經能夠通過不創建按鈕,直到我希望它顯示,但需要檢查,看看它是否已經存在,而不僅僅是使用它。

回答

3

目前還沒有。鞋子中的按鈕仍然相當不可靠,尤其是在Windows上。您可以解決此問題通過將按鈕在插槽和隱藏或顯示的插槽,但你可能會發現,一旦被點擊一次按鈕就不會再隱瞞:

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