运行在while循环中的ruby Tk应用程序显示两次然后停止响应

时间:2013-03-14 03:05:54

标签: ruby loops tk

我对ruby很新,我正在尝试实现一个Tk应用程序,该应用程序将显示一个窗口,提示输入一定的间隔。在间隔之间,我希望窗口不显示在任何任务栏等等,所以我实现了以下代码,似乎第一次完美地工作,但在窗口显示第二次后,我在TkEntry并单击TkButton窗口被解除并且永远不会返回。我已经尝试在关键位置进行一些“看跌”调用以查看发生了什么,似乎它甚至从未使它超过对“displayUi”的调用。

*编辑: 我在Windows 7系统上运行ruby 1.9.3p385(2013-02-06)[i386-mingw32](如果有任何区别的话)

任何帮助(即使它提供不同的机制来实现相同的目标)将不胜感激,但请记住,我是一个红宝石noobie。谢谢!

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

0 个答案:

没有答案