qt pyside6 Mychat client

import sys
from PySide6 import QtCore, QtWidgets, QtGui
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QPlainTextEdit

import Mychat_ui  # 导入对应的ui文件库
import Ui_MainWindow
import socket
import threading
import time

people_name = '小染'
people_send = ''
service_ip = '101.34.212.195'#目标服务器
service_port = 10011#目标端口

accept_message = ''

def client_send(sock, mes):
    sock.send(mes.encode('utf-8'))

    if 'exit' in mes:
        sock.shutdown(2)
        sock.close()

def client_accept(sock):
    global people_send
    while True:
        try:
            accept = sock.recv(1024).decode('utf-8') #一次接收数据1024
            #print(type(accept))
            if not accept:
                break
            if accept != people_send:
                print(accept)
                widget.mainWindow.plainTextEdit.appendPlainText(accept)

        except:
            print("error")
            break

class MyWidget(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.ui = Mychat_ui.Ui_Mychat()  # 实例化UI对象
        self.ui.setupUi(self)  # 初始化
        self.mainWindow = Ui_MainWindow.Ui_MainWindow()
        self.mainWindow.setupUi(self.mainWindow)

        self.bind()

    # 将所有槽函数的绑定写在这里
    def bind(self):
        self.ui.login.clicked.connect(self.gotoMain)
        self.mainWindow.pushButton.clicked.connect(self.sendMessage)#发送按钮

    def gotoMain(self):
        global people_name
        self.mainWindow.setWindowTitle(people_name)
        self.mainWindow.setWindowIcon(QIcon('images/logo.jpg'))
        self.mainWindow.show()#打开聊天界面
        self.close()#关闭登录界面

        # people_name = input('输入你的名字:')

        self.sock = socket.socket()  # 创建socket对象
        self.sock.connect((service_ip, service_port))  # address的格式为元组(hostname,port)
        self.sock.send(people_name.encode('utf-8'))
        th_send = threading.Thread(target=client_send, args=[(self.sock)])  # 发送消息线程
        th_send.start()  # 启动发送线程
        th_accept = threading.Thread(target=client_accept, args=[(self.sock)])  # 发送消息线程
        th_accept.start()  # 启动接收线程


    def sendMessage(self):
        message = str(self.mainWindow.plainTextEdit_3.toPlainText())
        self.mainWindow.plainTextEdit_3.clear()
        message = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) \
            + "\n" + people_name + ':' + message + "\n"
        #self.mainWindow.plainTextEdit.appendPlainText(message)#由于服务端会发生消息,所以等价于我发送消息给服务端,服务端又发送消息给我
        client_send(self.sock, message)

if __name__ == "__main__":
    app = QtWidgets.QApplication([])

    widget = MyWidget()
    widget.setWindowTitle('MyChat')
    widget.setWindowIcon(QIcon('images/logo.jpg'))
    widget.show()

    sys.exit(app.exec())

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'Mychat.ui'
##
## Created by: Qt User Interface Compiler version 6.3.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QPushButton, QSizePolicy,
                               QVBoxLayout, QWidget, QMainWindow)

class Ui_Mychat(QMainWindow):
    def setupUi(self, Mychat):
        if not Mychat.objectName():
            Mychat.setObjectName(u"Mychat")
        Mychat.resize(270, 366)
        Mychat.setMinimumSize(QSize(270, 366))
        Mychat.setMaximumSize(QSize(270, 366))
        Mychat.setStyleSheet(u"background:rgb(245,245,245);")
        self.avator = QLabel(Mychat)
        self.avator.setObjectName(u"avator")
        self.avator.setGeometry(QRect(90, 60, 91, 91))
        self.avator.setStyleSheet(u"border-radius:50%;")
        self.avator.setPixmap(QPixmap(u"images/headPhoto.jpg"))
        self.avator.setScaledContents(True)
        self.layoutWidget = QWidget(Mychat)
        self.layoutWidget.setObjectName(u"layoutWidget")
        self.layoutWidget.setGeometry(QRect(40, 240, 201, 111))
        self.verticalLayout = QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2 = QVBoxLayout()
        self.verticalLayout_2.setObjectName(u"verticalLayout_2")
        self.login = QPushButton(self.layoutWidget)
        self.login.setObjectName(u"login")
        self.login.setStyleSheet(u"QPushButton {\n"
                                    "    background-color: rgb(26,173,25);\n"
                                    "    border: 1px solid rgb(26,173,25);\n"
                                    "    padding: 10px;\n"
                                    "    border-radius: 5px;\n"
                                    "	color:white;\n"
                                    "}\n"
                                    "\n"
                                    "QPushButton:hover {\n"
                                    "    background-color: rgb(18,150,17);\n"
                                    "	\n"
                                    "}\n"
                                    "\n"
                                    "QPushButton:pressed{\n"
                                    "    border: 1px solid #3a8ee6;\n"
                                    "    color: white;\n"
                                    "}")

        self.verticalLayout_2.addWidget(self.login)

        self.description = QLabel(self.layoutWidget)
        self.description.setObjectName(u"description")
        font = QFont()
        font.setPointSize(10)
        self.description.setFont(font)
        self.description.setStyleSheet(u"color:rgb(0,120,212);")
        self.description.setAlignment(Qt.AlignCenter)

        self.verticalLayout_2.addWidget(self.description)


        self.verticalLayout.addLayout(self.verticalLayout_2)


        self.retranslateUi(Mychat)

        QMetaObject.connectSlotsByName(Mychat)

        # bind slot
        #self.login.clicked.connect(lambda : print('hello'))
    # setupUi

    def retranslateUi(self, Mychat):
        Mychat.setWindowTitle(QCoreApplication.translate("Mychat", u"Form", None))
        self.avator.setText("")
        self.login.setText(QCoreApplication.translate("Mychat", u"\u767b\u5f55", None))
        self.description.setText(QCoreApplication.translate("Mychat", u"\u5c0f\u67d3\u5f00\u53d1", None))
    # retranslateUi


# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'MainWindow.ui'
##
## Created by: Qt User Interface Compiler version 6.3.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient,
    QCursor, QFont, QFontDatabase, QGradient,
    QIcon, QImage, QKeySequence, QLinearGradient,
    QPainter, QPalette, QPixmap, QRadialGradient,
    QTransform)
from PySide6.QtWidgets import (QApplication, QListView, QMainWindow, QMenu,
    QMenuBar, QPlainTextEdit, QPushButton, QSizePolicy,
    QStatusBar, QWidget)

class Ui_MainWindow(QMainWindow):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 509)
        self.actionport = QAction(MainWindow)
        self.actionport.setObjectName(u"actionport")
        self.actionip = QAction(MainWindow)
        self.actionip.setObjectName(u"actionip")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.plainTextEdit = QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setObjectName(u"plainTextEdit")
        self.plainTextEdit.setGeometry(QRect(0, 0, 571, 351))
        self.plainTextEdit_3 = QPlainTextEdit(self.centralwidget)
        self.plainTextEdit_3.setObjectName(u"plainTextEdit_3")
        self.plainTextEdit_3.setGeometry(QRect(0, 400, 571, 61))
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(480, 410, 75, 31))
        self.listView = QListView(self.centralwidget)
        self.listView.setObjectName(u"listView")
        self.listView.setGeometry(QRect(590, 1, 211, 461))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 800, 22))
        self.menu = QMenu(self.menubar)
        self.menu.setObjectName(u"menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menu.menuAction())
        self.menu.addAction(self.actionport)
        self.menu.addAction(self.actionip)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.actionport.setText(QCoreApplication.translate("MainWindow", u"port", None))
        self.actionip.setText(QCoreApplication.translate("MainWindow", u"ip", None))
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None))
        self.menu.setTitle(QCoreApplication.translate("MainWindow", u"\u8bbe\u7f6e", None))
    # retranslateUi



本文作者:小染``

本文链接:https://www.cnblogs.com/xiaoranya/p/16383670.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   小染``  阅读(70)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起