3

私はrubyにかなり慣れておらず、特定の間隔で入力を求めるウィンドウを表示するTkアプリケーションを実装しようとしています。インターバルの間に、ウィンドウがタスクバーなどに表示されないようにしたいので、最初は完全に機能しているように見える次のコードを実装しましたが、ウィンドウが2回目に表示された後、 TkEntryをクリックし、TkButtonをクリックすると、ウィンドウが閉じられ、戻ることはありません。何が起こっているかを確認するために、主要な場所にいくつかの「プット」コールを入れてみましたが、「displayUi」へのコールを超えることは決してないようです。

*編集:Windows7システムでruby1.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
4

0 に答える 0