0

wx.CallLater を使用したい: 2 つの関数があり、それらはループ内で互いに呼び出しますが、すべての呼び出しの前に 3 秒の休憩があります。問題は次のとおりです。私のプログラムが「goto01」にある場合、「Notify」が呼び出される前に正しく 3 秒待機します。しかし、プログラムが「通知」にある場合、「goto01」がすぐに呼び出されます。この時点で 3 秒の区切りがないのはなぜですか? これが私のコードです & 両方の関数のそれぞれの最後の行に wx.CallLater イベントがあります:

self.speed = 3000

def Notify(self):
    self.zeit.Destroy()
    self.zeitint = self.zeitint + 1
    time = round(self.zeitint/2)
    self.zeit = wx.StaticText(self.friendlygamepanel, -1, '%d. Spielminute'%(time), (325+self.dx,9))
    try:
        self.ticker.Destroy()
        self.picplayer1but.Destroy()

    except:
        pass
    if self.zeitint % 2 == 1:
        self.ticker = wx.TextCtrl(self, -1, teamname[0]+' ist im Ballbesitz.',
                    size=(340, 320), pos=(195+self.dx,160), style=wx.TE_RICH2|wx.TE_MULTILINE|wx.TE_NO_VSCROLL)
        self.ticker.SetBackgroundColour((128,191,130))
        self.ticker.SetStyle(0, len(teamname[0]), wx.TextAttr("BLACK", wx.NullColour, self.font))
        wx.CallLater(int(self.speed),self.goto01(players,self.playerpics))

    else:
        self.ticker = wx.TextCtrl(self, -1, oppteamname[0]+' ist im Ballbesitz.',
                    size=(340, 320), pos=(195+self.dx,160), style=wx.TE_RICH2|wx.TE_MULTILINE|wx.TE_NO_VSCROLL)
        self.ticker.SetBackgroundColour((205,173,65))
        self.ticker.SetStyle(0, len(oppteamname[0]), wx.TextAttr("BLACK", wx.NullColour, self.font))
        wx.CallLater(int(self.speed),self.goto01(oppplayers,self.oppplayerpics))


def goto01(self,theplayer,thepicture):
    if self.zeitint % 2 == 1:
        picpos = 0
    else:
        picpos = 460
    self.whichplayer = random.randint(0,2)
    self.whichoppplayer = random.randint(0,2)
    last = self.ticker.GetLastPosition()
    self.ticker.AppendText('\n\n'+theplayer[self.whichplayer][0]+' hat den Ball.')
    self.ticker.SetStyle(last, last+2+len(theplayer[self.whichplayer][0]), wx.TextAttr("BLACK", wx.NullColour, self.font))
    self.picplayer1 = wx.Image(thepicture[self.whichplayer], wx.BITMAP_TYPE_BMP).ConvertToBitmap()
    self.picplayer1but = wx.BitmapButton(self.friendlygamepanel,-1,self.picplayer1,pos=(90+self.dx+picpos,180))
    if self.zeitint < 60:
        wx.CallLater(int(self.speed),self.Notify)
4

2 に答える 2

3

変数を指定して関数を呼び出すと、wxPython にすぐに呼び出すように指示されます。通常の関数呼び出しと同じです。ただし、引数を渡すことができます。

http://wxpython-users.1045709.n5.nabble.com/wx-CallLater-issue-td4885884.html

そのリンクが指摘しているように、CallLater の署名は次のとおりです。

(自己、ミリ秒、呼び出し可能、*args、**kwargs)

つまり、次のようなことができるはずです

wx.CallLater(numberOfMilliSecs, myFunction, arg1, arg2)
于 2012-10-23T13:23:32.250 に答える
0

なるほど、「goto01(variable1,variable2)」の代わりに「goto01」を呼び出すだけで動作します。「goto」を呼び出すときにこれらの変数を使用する必要がないようにコードを変更することができましたが、wx.CallLater が変数で機能しない理由はまだわかりません。

于 2012-10-23T09:10:21.597 に答える