Practice python, UI in PyQt and improve "[python] Python Socket Tutorial"
Development Information:
- Python 2.6
- PyQt 4.4.4
- Mac OS X 10.5.6
uiMessenger.py
#!/usr/local/bin/python
##################################################################
# Project: Python Messenger
# Filename: uiMessenger.py
# Description: User interface for messenger
# Date: 2009.05.27
# Programmer: Mantis
# E-mail: kill12688@yahoo.com.tw
# Website:http://importcode.blogspot.com
##################################################################
from PyQt4 import QtCore, QtGui
class Ui_MessengerClass(object):
def setupUi(self, MessengerClass):
MessengerClass.setObjectName("MessengerClass")
MessengerClass.resize(400, 600)
#add IP label, lineEdit
self.label_ip = QtGui.QLabel(MessengerClass)
self.label_ip.setGeometry(QtCore.QRect(10, 10, 25, 25))
self.label_ip.setObjectName("label_ip")
self.lineEdit_ip = QtGui.QLineEdit(MessengerClass)
self.lineEdit_ip.setGeometry(QtCore.QRect(45, 10, 155, 25))
#add Port label, lineEdit
self.label_port = QtGui.QLabel(MessengerClass)
self.label_port.setGeometry(QtCore.QRect(210, 10, 30, 25))
self.label_port.setObjectName("label_port")
self.lineEdit_port = QtGui.QLineEdit(MessengerClass)
self.lineEdit_port.setGeometry(QtCore.QRect(250, 10, 50, 25))
#add connect button
self.pushButton_connect = QtGui.QPushButton(MessengerClass)
self.pushButton_connect.setGeometry(QtCore.QRect(310, 10, 80, 25))
self.pushButton_connect.setObjectName("pushButton_connect")
#add display textEdit
self.textEdit_display = QtGui.QTextEdit(MessengerClass)
self.textEdit_display.setGeometry(QtCore.QRect(10, 45, 380, 475))
#add Nick Name label, lineEdit
self.label_nickname = QtGui.QLabel(MessengerClass)
self.label_nickname.setGeometry(QtCore.QRect(10, 530, 70, 27))
self.label_nickname.setObjectName("label_nickname")
self.lineEdit_nickname = QtGui.QLineEdit(MessengerClass)
self.lineEdit_nickname.setGeometry(QtCore.QRect(90, 530, 300, 27))
#add send lineEdit, button
self.lineEdit_send = QtGui.QLineEdit(MessengerClass)
self.lineEdit_send.setGeometry(QtCore.QRect(10, 565, 295, 25))
self.pushButton_send = QtGui.QPushButton(MessengerClass)
self.pushButton_send.setGeometry(QtCore.QRect(315, 565, 75, 25))
self.pushButton_send.setObjectName("pushButton_send")
self.retranslateUi(MessengerClass)
QtCore.QObject.connect(self.pushButton_connect,QtCore.SIGNAL("clicked()"),MessengerClass.onConnectClicked)
QtCore.QObject.connect(self.pushButton_send,QtCore.SIGNAL("clicked()"),MessengerClass.onSendClicked)
QtCore.QMetaObject.connectSlotsByName(MessengerClass)
def retranslateUi(self, MessengerClass):
MessengerClass.setWindowTitle(QtGui.QApplication.translate("MessengerClass", "ChatRoom", None, QtGui.QApplication.UnicodeUTF8))
self.label_ip.setText(QtGui.QApplication.translate("label_ip", "IP:", None, QtGui.QApplication.UnicodeUTF8))
self.label_port.setText(QtGui.QApplication.translate("label_port", "port:", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_connect.setText(QtGui.QApplication.translate("pushButton_connect", "Connect", None, QtGui.QApplication.UnicodeUTF8))
self.label_nickname.setText(QtGui.QApplication.translate("label_nickname", "Nick Name", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_send.setText(QtGui.QApplication.translate("pushButton_send", "Send", None, QtGui.QApplication.UnicodeUTF8))
server.py
t#!/opt/local/bin/python
##################################################################
# Project: Python Messenger
# Filename: server.py
# Description: server for messengers
# Date: 2009.05.27
# Programmer: Mantis
# E-mail: kill12688@yahoo.com.tw
# Website:http://importcode.blogspot.com
##################################################################
import sys
import socket
import threading
import uiMessenger
from PyQt4 import QtCore, QtGui
class serverThread(threading.Thread):
def __init__(self, connection, address, ui, serverMessenger):
self.connection = connection
self.address = address
self.ui =ui
self.serverMessenger = serverMessenger
self.onConnect = True
threading.Thread.__init__(self)
def run(self):
while self.onConnect:
recvData = self.connection.recv(1024)
if recvData != ":exit" and recvData != '':
self.ui.textEdit_display.append(recvData)
else:
break
self.connection.close()
self.ui.textEdit_display.append('Disconnect by ' + str(self.address))
self.serverMessenger.getConnect()
def close(self):
self.onConnect = False
class serverMessenger(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self, parent)
self.ui = uiMessenger.Ui_MessengerClass()
self.ui.setupUi(self)
self.ui.lineEdit_ip.setText(str('127.0.0.1'))
self.ui.lineEdit_port.setText(str(8001))
def onConnectClicked(self):
host = str(self.ui.lineEdit_ip.text())
port = int(self.ui.lineEdit_port.text())
self.host = host
self.port = port
self.serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.serverSocket.bind((self.host, self.port))
self.serverSocket.listen(5)
self.getConnect()
def getConnect(self):
self.ui.textEdit_display.append('Waiting...')
self.connection, self.address = self.serverSocket.accept()
self.ui.textEdit_display.append('Enter :exit to disconnect')
self.ui.textEdit_display.append('Connect by ' + str(self.address))
thread = serverThread(self.connection, self.address, self.ui, self)
thread.start()
def onSendClicked(self):
sendData_temp = str(self.ui.lineEdit_send.text())
serverName = str(self.ui.lineEdit_nickname.text())
if serverName == '':
serverName = 'Server'
if sendData_temp == ':exit':
sys.exit(app.exec_())
sendData = str(serverName) + ': ' + sendData_temp
self.ui.textEdit_display.append(sendData)
self.connection.send(sendData)
self.ui.lineEdit_send.clear()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
serverMessenger = serverMessenger()
serverMessenger.show()
sys.exit(app.exec_())
client.py
#!/opt/local/bin/python
##################################################################
# Project: Python Messenger
# Filename: client.py
# Description: client for messenger
# Date: 2009.05.27
# Programmer: Mantis
# E-mail: kill12688@yahoo.com.tw
# Website:http://importcode.blogspot.com
##################################################################
import sys
import socket
import threading
import uiMessenger
from PyQt4 import QtCore, QtGui
class clientThread(threading.Thread):
def __init__(self, clientSocket, address, ui):
self.clientSocket = clientSocket
self.address = address
self.ui = ui
self.onConnect = True
threading.Thread.__init__(self)
def run(self):
while self.onConnect:
recvData = self.clientSocket.recv(1024)
if recvData != ":exit" and recvData != '':
self.ui.textEdit_display.append(recvData)
else:
break
self.clientSocket.close()
self.ui.textEdit_display.append('Disconnect by ' + str(self.address))
def close(self):
self.onConnect = False
class clientMessenger(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self, parent)
self.ui = uiMessenger.Ui_MessengerClass()
self.ui.setupUi(self)
self.ui.lineEdit_ip.setText(str('127.0.0.1'))
self.ui.lineEdit_port.setText(str(8001))
def onConnectClicked(self):
host = str(self.ui.lineEdit_ip.text())
port = int(self.ui.lineEdit_port.text())
self.host = host
self.port = port
self.clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.clientSocket.connect((self.host, self.port))
self.address = (self.host, 8001)
self.ui.textEdit_display.append('Enter :exit to disconnect')
self.ui.textEdit_display.append('Connect to ' + str(self.address))
thread = clientThread(self.clientSocket, self.address, self.ui)
thread.start()
def onSendClicked(self):
sendData_temp = str(self.ui.lineEdit_send.text())
clientName = str(self.ui.lineEdit_nickname.text())
if clientName == '':
clientName = 'Client'
if sendData_temp == ':exit':
sys.exit(app.exec_())
sendData = str(clientName) + ': ' + sendData_temp
self.ui.textEdit_display.append(sendData)
self.clientSocket.send(sendData)
self.ui.lineEdit_send.clear()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
clientMessenger = clientMessenger()
clientMessenger.show()
sys.exit(app.exec_())
Screenshot:

0 意見:
Post a Comment