[python] WxPython :: Problém s vláknem

Jakub Vojáček jakohv na seznam.cz
Středa Duben 16 16:38:19 CEST 2008


Ahoj

Při práci s knihovnou Wx jsem narazil na takový problém. Ve své aplikaci mám jedno hlavní okno. Pak se ale ještě musí občas otevřít další okno. Toto okno otevírám pomocí vlákna (threadu), ale nějak to nefunguje (první okno je OK, ale druhé se "zasekne"). Zde je můj kód:

#-*- coding: utf-8 -*-
import re, time
import thread,threading, socket,wx
DEFAULT_HOST='localhost'
DEFAULT_PORT=1991
class ReceiveEmail:
    def __init__(self):
        while 1:
            self.send_warning("some warning")
            time.sleep(15)  
    def send_warning(self,what):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((DEFAULT_HOST, DEFAULT_PORT))
        s.send(what)
        s.close()
class Server(threading.Thread):
    def __init__(self,prijimaci_funkce):
        self.prijimaci_funkce=prijimaci_funkce
        self.S = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.S.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.S.bind((DEFAULT_HOST,DEFAULT_PORT))
        self.S.listen(5)
        threading.Thread.__init__(self)
        self.start()
        #Start thread:
        thread.start_new_thread(ReceiveEmail, ())
    def run(self):
        while True:
            try:
                newS, address = self.S.accept()
                receivedData = newS.recv(1024)
                self.prijimaci_funkce(receivedData)
                newS.close()
            finally: pass
        self.S.close()
class EmailWarningWindow:
    def __init__(self):
        self.okno=wx.Frame(None,title="Second Window",id=1987,size=(490,340),style =wx.SIMPLE_BORDER|wx.STAY_ON_TOP)
        wx.StaticText(self.okno, label="some text")
        wx.Yield()
        self.okno.SetAutoLayout(True)
        self.okno.Show(True)
class App:
    def __init__(self):
        okno = wx.App(0)
        self.okno=wx.Frame(None,title="First window",id=-1,size=(490,340))
        Server(accept)
        self.okno.Show(True)
        okno.MainLoop()
def accept(data):
    #Run the second window; 
    EmailWarningWindow()
if __name__ == "__main__":
    App()


První okno se otevře, to je funguje, ale to druhé stále pouze zamrzá. Co s tím?

Děkuji

Jakub Vojáček
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20080416/a7584cde/attachment.htm 


Další informace o konferenci Python