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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步