associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

ChatXmlRpcTkinter

Chat usando XmlRpc e Tkinter

Nesse cookbook, eu demonstro a implementação de um Chat bem simples utilizando XmlRpc e Tkinter como interface gráfica.

Lembrando que esse é apenas um exemplo de uso do XmlRpc e que o XmlRpc não é o melhor protocolo para implementar-se um chat.

Servidor

   1 import SimpleXMLRPCServer
   2 
   3 msg = ''
   4 
   5 class Chat(object):
   6 
   7     def send(self, m):
   8         global msg
   9         msg += m
  10         
  11     def get(self):
  12         global msg
  13         return msg
  14         
  15 
  16 server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8888))
  17 server.register_instance(Chat())
  18 
  19 server.serve_forever()

Cliente

   1 import xmlrpclib
   2 from Tkinter import *
   3 
   4 class App:
   5     
   6     def __init__(self, master):
   7         
   8         self.master = master
   9         
  10         self.server = xmlrpclib.ServerProxy("http://localhost:8888")
  11         
  12         frame = Frame(master)
  13         frame.pack()
  14         
  15         self.nick_label = Label(frame, text="Nick: ")
  16         self.nick_label.grid(row=0, sticky=W)
  17         
  18         self.nick = Entry(frame)
  19         self.nick.grid(row=0, column=1, columnspan=2, sticky=W+E)
  20         
  21         self.text = Text(frame)
  22         self.text.grid(row=1, columnspan=3, sticky=W)
  23         
  24         self.msg = Label(frame, text='Mensagem: ')
  25         self.msg.grid(row=2, sticky=W)
  26         
  27         self.entry = Entry(frame)
  28         self.entry.grid(row=2, column=1, sticky=W+E)
  29         
  30         self.enviar = Button(frame, text="Enviar", command=self.enviar_mensagem)
  31         self.enviar.grid(row=2, column=2, sticky=E)
  32         
  33         self.master.after(500, self.oi)
  34 
  35         
  36     def enviar_mensagem(self):
  37         print self.entry.get()
  38         text = '>>%s: %s \n' % (self.nick.get(), self.entry.get())
  39         self.server.send(text)
  40 
  41         
  42     def oi(self):
  43         self.master.after(500, self.oi)
  44         self.text.delete(1.0, END)
  45         self.text.insert(END, self.server.get())        
  46         
  47 
  48 
  49 root = Tk()
  50 
  51 app = App(root)
  52 
  53 root.mainloop()

Volta para CookBook


AndrewsMedina