user5849798
user5849798

Reputation:

Tkinter not starting a window

I'm making a basic chat client in Python, but it won't open the window. It seems to freeze when the server thread is started. I'm using the socketserver module.

class ChatClient(Frame):
    def CreateWidgets(self):
        self.whoislist = Label(self,text = '')
        def updateWhoIs(peopleList):
            finishlist = 'People:'
            for person in peopleList:
                finishlist += ('\n' + person)
            self.whoislist.config(text = finishlist)
        self.whoislist.grid(row = 1, columnspan = 7)
        self.mainchat = Text(self)
        self.mainchat.grid(columnspan = 5, rowspan = 3, row = 2, column = 3)
    peeps = []
    def __init__(self,master = None):
        Frame.__init__(self,master)
        self.grid()
        self.CreateWidgets()
        print('Huh.')
        self.server = socketserver.TCPServer(('127.0.0.1',1337),MyTCPHandler)
        self.sthread = Thread(target = self.server.serve_forever())
        self.sthread.start()
        print('Yay')

Upvotes: 0

Views: 75

Answers (1)

Tadhg McDonald-Jensen
Tadhg McDonald-Jensen

Reputation: 21453

you call self.server.serve_forever() while initializing the thread, setting its return value to the target of the thread, however as the name implies: it lasts forever. Instead specify the method (without calling it) as the target:

self.sthread = Thread(target = self.server.serve_forever)

and it should work although be careful how MyTCPHandler interacts with the Tk application as tkinter is not thread safe.

Upvotes: 1

Related Questions