我用pyqt5写了一个界面,其他人写的客户端,和服务端的模块,
但是现在我有点蒙,怎么把客户端接收到的给我的界面啊,,,,,,,
from socket import *
import threading
import sys
import os
import signal
def denglu():
while True:
name = input("请输入登录姓名:")
mima = input("请输入密码:")
msg = "D %s %s" % (name, mima)
HOST = '0.0.0.0'
PORT = 8888
ADDR = (HOST, PORT)
s = socket(AF_INET, SOCK_STREAM)
s.connect((HOST, PORT))
# 发送登录请求
s.send(msg.encode())
# 判断是否可以登录
data = s.recv(1024).decode()
if data[0:2] == 'OK':
return s, name, data
break
else:
# 不能登录的原因
print(data)
s.close()
if data == "您输入的密码错误" or "您输入的用户名不存在":
continue
def zhuce():
while True:
name = input("请输入注册姓名:")
mima = input("请输入密码:")
msg = "L %s %s" % (name, mima)
HOST = '0.0.0.0'
PORT = 8888
ADDR = (HOST, PORT)
s = socket(AF_INET, SOCK_STREAM)
s.connect((HOST, PORT))
# 发送登录请求
s.send(msg.encode())
# 判断是否可以登录
data = s.recv(1024).decode()
if data == "用户已存在":
s.close()
print(data)
break
def do_child(s, name):
while True:
text = "\n"+input()
# 退出
if text.strip() == 'quit':
msg = 'Q ' + name
s.send(msg.encode())
# 从子进程中杀死父进程
os.kill(os.getppid(), signal.SIGKILL)
sys.exit("退出聊天室")
# 聊天
else:
msg = "R %s %s" % (name, text)
s.send(msg.encode())
def do_parent(s):
while True:
msg = s.recv(1024).decode()
print(msg)
def chat_one():
pass
def chat_record():
pass
def main():
# 创建套接字
# 启动客户端即需要登录或注册
while True:
xuanze = input("鼠标(D)登录,鼠标(L)注册")
if xuanze == 'D':
s, name, data = denglu()
print(data)
break
if xuanze == 'L':
t1 = threading.Thread(target=zhuce)
t1.start()
t1.join()
# 创建父子进程用于发送和接受消息
pid = os.fork()
if pid < 0:
sys.exit("创建子进程失败")
elif pid == 0:
do_child(s, name)
else:
do_parent(s)
if name == "__main__":
main()
这个是主界面
(还没完成,想试试,没有吧包都引进来所以不能运行)
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_mainwindows import Ui_MainWindow
import dengru, zhuce
class myLabel(QLabel):
def init(self,parent = None):
super(myLabel,self).__init__(parent)
def mousePressEvent(self, e):##重载一下鼠标点击事件
print ('you clicked the label')
"""
先调用对话宽
"""
self.another=dengru.deng_ru()
self.another.show()
def mouseReleaseEvent(self, QMouseEvent):
print ('you have release the mouse')
class MainWindow(QMainWindow, Ui_MainWindow):
"""
Class documentation goes here.
"""
def init(self, parent=None):
"""
Constructor
@param parent reference to the parent widget
@type QWidget
"""
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.add()
self.Show()
@pyqtSlot()
def on_pushButton_3_clicked(self):
"""
Slot documentation goes here.
保存记录
"""
# TODO: not implemented yet
try:
filename=QFileDialog.getSaveFileName(self,'save file','/')
with open(filename[0],'w') as f:
my_text=self.textBrowser_2.toPlainText()
f.write(my_text)
f.close()
except OSError:
pass
@pyqtSlot()
def on_pushButton_5_clicked(self):
"""
Slot documentation goes here.
清屏
"""
# TODO: not implemented yet
self.textBrowser_2.setText("")
@pyqtSlot()
def on_pushButton_4_clicked(self):
"""
Slot documentation goes here.
打开文件
"""
# TODO: not implemented yet
try:
filename=QFileDialog.getOpenFileName(self,'open file','/')
with open(filename[0],'r') as f:
my_txt=f.read()
self.textEdit.setPlainText(my_txt)
f.close()
except OSError:
pass
@pyqtSlot()
def on_pushButton_2_clicked(self):
"""
Slot documentation goes here.
清除
"""
# TODO: not implemented yet
self.textEdit.setText("")
@pyqtSlot()
def on_pushButton_clicked(self):
"""
Slot documentation goes here.
发送
"""
"""这里可以用登入信息控制发送信息,以便区别登入
(先设置一个变量,没有登入为flase,登入为true,任何用于
登入之后每次发送信息用)"""
text= self.textEdit.toPlainText()
self.textBrowser_2.append("111:"+text)
self.textEdit.setText("")
return txet
@pyqtSlot()
def on_pushButton_7_clicked(self):
"""
Slot documentation goes here.
官网
"""
# TODO: not implemented yet
raise NotImplementedError
@pyqtSlot()
def on_pushButton_8_clicked(self):
"""
Slot documentation goes here.
注册
返回一个值给客户端
"""
# TODO: not implemented yet
self.another=zhuce.ZhuCe()
self.another.show()
@pyqtSlot()
def on_pushButton_6_clicked(self):
"""
Slot documentation goes here.
登入按钮
调用另一个py的类生成对象,然后对象调用show()
返回一个值给客户端
"""
# TODO: not implemented yet
self.another=dengru.deng_ru()
self.another.show()
def closeEvent(self, event):
"""
退出弹框
"""
reply = QMessageBox.question(self, '信息', '确认退出吗?',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
def add(self):
label1 = myLabel(self)
label1.setText("TextLabe1")
self.verticalLayout_3.addWidget(label1)
label1 = myLabel(self)
label1.setText("TextLabe2")
self.verticalLayout_3.addWidget(label1)
def Show(self):
name="222:"
data ="xxxx"
self.textBrowser_2.append(name+data)
if name == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())