我对 ruby 还很陌生,我正在尝试实现一个 Tk 应用程序,该应用程序将显示一个窗口,提示在一定间隔内输入。在间隔之间,我希望窗口不显示在任何任务栏等中,因此我实现了以下代码,第一次似乎可以完美运行,但在窗口第二次显示后,我在TkEntry 并单击 TkButton 窗口被关闭并且永远不会返回。我尝试在关键位置进行一些“放置”调用,以查看发生了什么,似乎它甚至从未超过对“displayUi”的调用。
*编辑:我在 Windows 7 系统上运行 ruby 1.9.3p385 (2013-02-06) [i386-mingw32] (以防有什么不同)
任何帮助(即使它提供不同的机制来实现相同的目标)将不胜感激,但请记住,我是一个红宝石新手。谢谢!
require "tk"
class Sample
attr_accessor :root, :active
@active = false
def initialize
# init
end
def entry (task)
# do some work here
@active = false
end
def displayUi ()
@active = true
if (@root.nil?)
@root = TkRoot.new { title "Sample App" }
else
# already running just restart
Tk.restart
end
TkLabel.new(@root) {
text 'Sample Text'
pack { padx 15; pady 15; side 'left' }
}
statusInput = TkEntry.new(@root) {
pack('side'=>'left', 'padx'=>10, 'pady'=>10)
}
statusInput.focus
response = TkVariable.new
statusInput.textvariable = response
TkButton.new(@root, :text => "Ok", :command => proc { entry(response.value); @root.destroy }) {
pack('side'=>'left', 'padx'=>10, 'pady'=>10)
}
Tk.mainloop
end
end
i=0
st = Sample.new
while (true)
if (!st.active)
st.displayUi()
end
sleep(1)
end