Advertisement
Guest User

Untitled

a guest
Jul 1st, 2011
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.38 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. from PyQt4.QtCore import *
  4. from PyQt4.QtGui import *
  5.  
  6.  
  7.  
  8. class FenetreChat(QDialog):
  9.     """Fenêtre principale de l'application iTchat"""
  10.    
  11.     def __init__(self, sock, parent=None):
  12.         QDialog.__init__(self, parent)
  13.         self.sock = sock
  14.         self.parent = parent
  15.         self.resize(600,500)
  16.         self.setMinimumWidth(600) # Largeur minimale
  17.         self.setMinimumHeight(500) # Hauteur minimale
  18.         self.setWindowTitle('iTchat')
  19.         size_ecran = QDesktopWidget().screenGeometry()
  20.         size_fenetre = self.geometry()
  21.        
  22.         # on centre la fenetre
  23.         self.move((size_ecran.width()-size_fenetre.width())/2, (size_ecran.height()-size_fenetre.height())/2)
  24.        
  25.         # Layouts du haut, du bas, et principal comprenant haut et bas
  26.         self.layout_haut = QHBoxLayout()
  27.         self.layout_bas = QHBoxLayout()
  28.         self.layout_principal = QVBoxLayout()
  29.        
  30.         # Contenu du layout_haut
  31.         self.tchat = QTextEdit()
  32.         self.tchat.setReadOnly(True)
  33.         self.tchat.append(u"<font color='red'><b>Connecté.</b></font>")
  34.         self.connectes = QListWidget()
  35.         self.connectes.setMaximumWidth(200) # Largeur maximale
  36.         self.layout_haut.addWidget(self.tchat)
  37.         self.layout_haut.addWidget(self.connectes)
  38.        
  39.         # Contenu du layout_bas
  40.         self.input_texte = QLineEdit()
  41.         self.bouton_envoyer = QPushButton('Envoyer')
  42.         self.bouton_envoyer.setDefault(True)
  43.         self.layout_bas.addWidget(self.input_texte)
  44.         self.layout_bas.addWidget(self.bouton_envoyer)
  45.        
  46.         # Contenu du layout_principal
  47.         self.layout_principal.addLayout(self.layout_haut)
  48.         self.layout_principal.addLayout(self.layout_bas)
  49.         self.setLayout(self.layout_principal)
  50.        
  51.        
  52.         QWidget.connect(self.bouton_envoyer, SIGNAL("clicked()"), self.envoyer)
  53.         self.listening_thread = ListeningThread(self, self.sock)
  54.         self.connect(self.listening_thread, SIGNAL("message_recu"), self.recevoir)
  55.         self.connect(self.listening_thread, SIGNAL("join"), self.ajout_connecte)
  56.         self.connect(self.listening_thread, SIGNAL("left"), self.suppr_connecte)
  57.         self.connect(self.listening_thread, SIGNAL("maj"), self.maj_connectes)
  58.        
  59.         self.listening_thread.start()
  60.        
  61.        
  62.     def envoyer(self):
  63.         message = self.input_texte.text().trimmed()
  64.         if message != '':
  65.             self.sock.send(QString.toUtf8(message))
  66.             self.input_texte.setText('')
  67.            
  68.     def recevoir(self, message):
  69.         message = message.decode('UTF-8')
  70.         print message
  71.         self.tchat.append(message)
  72.        
  73.     def ajout_connecte(self, pseudo):
  74.         self.connectes.addItem(pseudo)
  75.    
  76.     def suppr_connecte(self, pseudo):
  77.         for index in xrange(self.connectes.count()):
  78.             if self.connectes.item(index).text() == pseudo:
  79.                 objet = self.connectes.takeItem(index)
  80.                 del objet
  81.                 break
  82.                
  83.     def maj_connectes(self, pseudos):
  84.         for pseudo in pseudos.split(','):
  85.             self.connectes.addItem(pseudo)
  86.  
  87.     def closeEvent(self, event):
  88.         self.listening_thread.terminate()
  89.         self.sock.close()
  90.         QWidget.deleteLater(self)
  91.         self.parent.close()
  92.         event.accept()
  93.  
  94.        
  95. class ListeningThread(QThread):
  96.     def __init__(self, parent, socket):
  97.         QThread.__init__(self, parent)
  98.         self.parent = parent
  99.         self.sock = socket
  100.         self.running = True
  101.        
  102.     def run(self):
  103.         while self.running:
  104.             message = self.sock.recv(1024)
  105.             print 'message recu: ' + message
  106.  
  107.             if message[0:11] == "MAJsuperman":
  108.                 pseudos = message[12:]
  109.                 self.emit(SIGNAL("maj"), pseudos)
  110.             elif message[0:12] != "JOINsuperman" and message[0:12] != "LEFTsuperman" and message[0:11] != "MAJsuperman":
  111.                 self.emit(SIGNAL("message_recu"), message)
  112.             elif message[0:12] == "JOINsuperman":
  113.                 pseudo = message[13:]
  114.                 self.emit(SIGNAL("join"), pseudo)
  115.             elif message[0:12] == "LEFTsuperman":
  116.                 pseudo = message[13:]
  117.                 self.emit(SIGNAL("left"), pseudo)
  118.            
  119.             QApplication.processEvents()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement