0

コマンドの送信にシリアルポートを使用するPythonでGUIを作成しています。私の古いスクリプトでは、GUI を使用せずに、書き込みコマンドの間に time.sleep(x) を使用しました (to コマンドが成功するためには必要です)。gui envrimont を使用する場合、sleep を使用できないため、after を使用します。

それはうまくいきますが、GUIにTkinterを使用しています。ボタン start を押すと、 OnButtonClickSTART はx時間後に他の機能を開始します。self.after を使用すると、すべてのプロセス間で x 秒待機します。動作しますが、関数で値を指定すると、指定された時間待機しません。

   def OnButtonClickSTART(self):
            print "START"
            self.button1.configure(state='disabled')
            self.after(1000, self.waitmore)

    def waitmore(self):
            value = 5
            print value
            self.after(10000,self.waitmuchmore(value))
    def waitmuchmore(self,value):
            print value
            self.after(10000,self.OnButtonClickSTOP)
    def OnButtonClickSTOP(self):
            print "STOP"
            self.button1.configure(state='normal')

そして、一連のコマンドを実行するためのより良い方法ではありませんか, それらの間に一定の時間. sleep に似ていますが、1 つの関数で動作し、GUI を無効にしません。

どうも

4

1 に答える 1

0

Usingself.waitmuchmore(value)はすぐにwaitmuchmoreメソッドを呼び出します。lambdaまたはを使用して、でfunctools.partial呼び出す新しい関数を返し、代わりにそれを渡す必要があります。waitmuchmorevalueself.after

lambda: self.waitmuchmore(value)

また

import functools
functools.partial(self.waitmuchmore, value)
于 2013-08-04T17:17:14.610 に答える