在Shoes中创建按钮后,是否可以更改文本?我已尝试修改按钮样式中的:text键--@button.style.inspect确认文本已更改 - 但该按钮仍显示原始文本。
答案 0 :(得分:2)
我还没想出如何更改现有按钮上的文字。我怀疑它到目前为止还没有得到支持。您可以创建一个新按钮并替换旧按钮。不幸的是,至少在Windows上,删除按钮会破坏所有点击事件。我没有在另一个平台上试过它,但也许它会起作用。尝试这样的事情:
Shoes.app do
para 'This is some text.'
@btn = button 'a' do |btn|
alert 'Hello, World!'
end
para 'Blah blah blah'
button 'Change!' do |btn|
old = @btn
new_style = old.style.dup
txt = new_style[:text].next!
old.parent.before(old) do
@btn = button txt, new_style
end
old.remove #This messes up the click events on Windows.
end
end
答案 1 :(得分:0)
一个非常古老的问题,但有一个解决方案。 你没有提到你的鞋子颜色,所以我使用绿色。 Green Shoes基于GTK2,因此如果你像这样提取GTK2对象,你可以使用GTK2的方法。
require 'green_shoes'
Shoes.app do
@btn = button('old text ') {|btn|alert('Hello, World!')}
button('Change!') {|btn|@btn.real.set_label("new")}
end
答案 2 :(得分:0)
我找到了一种模拟更改按钮文本的方法,将其替换为具有与旧按钮相同操作的新按钮。
按钮首先从其容器(堆栈或流)中移除,然后添加一个新的。这个新按钮将出现在容器的末尾,因此可能需要为这个按钮设置一个堆栈或流。
# Display 2 buttons, A and B. Initially button A has text "a".
# Pressing the top button, A, just shows the value of @ch (which is
# the text of the button) on the console.
# Pressing the second button appears to change the text of button A.
# It actually replaces it with a new button with the same action as the old.
Shoes.app do
def button_a_function
info("click! #{@ch}")
end
@ch = "a"
@the_flow = flow do
para "Button A, whose to be changed"
@b1 = button @ch do
button_a_function
end
end
flow do
para "Button B"
@b2 = button("Change it") {
@ch.succ!
@b1.remove
@b1 = @the_flow.button (@ch) {
button_a_function
}
}
end
end