Hi,
I am havin an encoding problem. If you have read my earlier post, I was
doing a simple chat application. Here is how it goes.
===
Client Class
===
def on_lineEdit_returnPressed(self):
text= self.ui.lineEdit.text()
self.ui.lineEdit.selectAll()
self.ui.lineEdit.cut()
self.ui.textEdit.paste()
self.netconnector.sendMessage(text)
===
netconnector
===
def sendMessage(self,msg):
if self.isConnected:
self.socket.send(msg.toUtf8().trimmed())
===
Server Side:
===
===
Server Class
===
self.connect(self.netconnector,QtCore.SIGNAL("dataRecieved(QString)"),self.messageRecieved)
===
server side netconnector:
===
def messageRecieved(self,data):
self.ui.textEdit.append(data)
What happens is that, when I type non-ascii characters into client side line
edit, it becomes distorted at server side, like
şğü -- > ÅÄü
Any idea how to fix this?
You can find whole code as attachment.
#!/usr/bin/python
# -*- coding: utf-8 -*-
# chat_server
import sys
from PyQt4 import QtCore,QtGui
from chat_ui import Ui_MainWindow
import socket
class Client(QtGui.QMainWindow):
def __init__(self,parent=None):
super(Client,self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.textEdit.append("Trying to connect to server")
self.netconnector = NetConnectWorker(self)
self.netconnector.attemptConnect()
self.connect(self.netconnector,QtCore.SIGNAL("Connected()"),self.connected)
# self.connect(self.netconnector,QtCore.SIGNAL("dataRecieved(QString)"),self.messageRecieved)
self.connect(self.netconnector,QtCore.SIGNAL("socketError()"),self.socketError)
self.ui.lineEdit
def on_lineEdit_returnPressed(self):
text= self.ui.lineEdit.text()
self.ui.lineEdit.selectAll()
self.ui.lineEdit.cut()
self.ui.textEdit.paste()
self.netconnector.sendMessage(text)
def connected(self):
self.ui.textEdit.append("Connected")
# def messageRecieved(self,data):
# self.ui.textEdit.append(data)
#
def socketError(self):
self.ui.textEdit.append("Couldn't connect lol :S")
class NetConnectWorker(QtCore.QThread):
def __init__(self,parent=None):
super(NetConnectWorker,self).__init__(parent)
self.exiting = False
self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.host = 'localhost'
self.port = 50000
self.size = 5
self.isConnected=False
def __del__(self):
self.exiting = True
self.wait()
def attemptConnect(self):
self.start()
def sendMessage(self,msg):
if self.isConnected:
self.socket.send(msg.toUtf8().trimmed())
def run(self):
try:
self.socket.connect((self.host,self.port))
self.isConnected = True
except socket.error:
self.emit(QtCore.SIGNAL("socketError()"))
return
self.emit(QtCore.SIGNAL("Connected()"))
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
sv=Client()
sv.show()
sys.exit(app.exec_())
#!/usr/bin/python
# -*- coding: utf-8 -*-
# chat_server
import sys
from PyQt4 import QtCore,QtGui
from chat_ui import Ui_MainWindow
import socket
class Server(QtGui.QMainWindow):
def __init__(self,parent=None):
super(Server,self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.textEdit.append("Waiting for inbound connections")
self.netconnector = NetConnectWorker(self)
self.netconnector.attemptConnect()
self.connect(self.netconnector,QtCore.SIGNAL("Connected()"),self.connected)
self.connect(self.netconnector,QtCore.SIGNAL("dataRecieved(QString)"),self.messageRecieved)
self.connect(self.netconnector,QtCore.SIGNAL("socketError(QString)"),self.socketError)
def connected(self):
self.ui.textEdit.append("Connected")
def messageRecieved(self,data):
self.ui.textEdit.append(data)
def socketError(self,msg):
print msg
self.ui.textEdit.append("Encountered a socket error:\n %s" % msg)
class NetConnectWorker(QtCore.QThread):
def __init__(self,parent=None):
super(NetConnectWorker,self).__init__(parent)
self.exiting = False
self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.host = ''
self.port = 50000
self.backlog = 5
self.address = ""
self.client = ""
def __del__(self):
self.exiting = True
self.wait()
if self.client:
self.client.close()
def attemptConnect(self):
self.start()
def run(self):
try:
self.socket.bind((self.host,self.port))
except socket.error,error:
self.emit(QtCore.SIGNAL("socketError(QString)"),error.message)
self.exit()
self.socket.listen(self.backlog)
self.client , self.address = self.socket.accept()
if self.client:
self.emit(QtCore.SIGNAL("Connected()"))
while not self.exiting:
data = self.client.recv(1024)
if data:
self.emit(QtCore.SIGNAL("dataRecieved(QString)"),data)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
sv=Server()
sv.show()
sys.exit(app.exec_())
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'chat.ui'
#
# Created: Mon Jun 27 14:02:52 2011
# by: PyQt4 UI code generator 4.8.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(523, 409)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout.setMargin(0)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.textEdit = QtGui.QTextEdit(self.centralwidget)
self.textEdit.setReadOnly(True)
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.verticalLayout.addWidget(self.textEdit)
self.lineEdit = QtGui.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.verticalLayout.addWidget(self.lineEdit)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt