熊猫923 2018-08-17 08:49 采纳率: 41.7%
浏览 2676
已结题

我用pyqt5写了一个界面,但是不知道怎么接收客户端收到的信息

我用pyqt5写了一个界面,其他人写的客户端,和服务端的模块,
但是现在我有点蒙,怎么把客户端接收到的给我的界面啊,,,,,,,

  • 写回答

2条回答 默认 最新

  • 熊猫923 2018-08-18 03:18
    关注

    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_())

    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler