用designer实现模拟聊天

聊天工具GUI开发,通过教材代码可以实现,现想借助qt5的designer工具再原代码进行修改实现,目前运行会自动关闭,请帮忙修改一下!

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

# Form implementation generated from reading ui file 'pyqt5018.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    # btnSend按钮与showDialog()绑定
    def showDialog(self):
        label = "Me:{}" \
            .format(self.strftime("%Y-%M-%d %H:%M:%S", self.localtime()))
        # 用toPlainText从输入框提取字符信息
        message = self.chatText.toPlainText()
        # 添加label信息
        self.outputarea.append(label)
        # 再添加message信息
        self.outputarea.append(' ' + message)
        # 传入消息后清空当前输入框
        self.chatText.clear()
        # 重新设准备好接受下一次输入
        self.chatText.setFocus()
        # 将每次输入信息存入程序同目录文本中,转历史消息执行saveMsg(txt)方法
        self.saveMsg(message)

    # 保存消息到save.txt文件,message参数传换为txt
    def saveMsg(self,txt):
        file = open('save.txt', 'a')
        self.file.write(txt + '\n')
        self.file.close()

    # 点击取消为清除函数
    def cancelMsg(self):
        self.setupUi.chatText.clear()

    # 判断是否存在历史消息文本,有写入,没有提示No Record
    def getMsg(self):
        if self.os.path.exists('save.txt'):
            message = '\n历史消息显示:'
            self.outputarea.append(message)
            file = open('save.txt', 'r')
            txt = file.read() + '\n'
            self.outputarea.append(txt)
            file.close()
        else:
            self.outputarea.append('No Record\n')
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(600, 400)
        self.chatText = QtWidgets.QPlainTextEdit(Form)
        self.chatText.setGeometry(QtCore.QRect(0, 0, 600, 230))
        font = QtGui.QFont()
        font.setFamily("Adobe 宋体 Std L")
        font.setPointSize(12)
        self.chatText.setFont(font)
        self.chatText.setReadOnly(True)
        self.chatText.setObjectName("chatText")
        self.outputarea = QtWidgets.QPlainTextEdit(Form)
        self.outputarea.setGeometry(QtCore.QRect(0, 250, 600, 100))
        font = QtGui.QFont()
        font.setFamily("Adobe 宋体 Std L")
        font.setPointSize(12)
        self.outputarea.setFont(font)
        self.outputarea.setReadOnly(False)
        self.outputarea.setObjectName("outputarea")
        self.btnSend = QtWidgets.QPushButton(Form)
        self.btnSend.setGeometry(QtCore.QRect(10, 360, 80, 30))

        self.btnSend.clicked.connect(self.showDialog)
        self.btnCancel = QtWidgets.QPushButton(Form)
        self.btnCancel.setGeometry(QtCore.QRect(110, 360, 80, 30))

        self.btnCancel.clicked.connect(self.getMsg)
        self.btnHistory = QtWidgets.QPushButton(Form)
        self.btnHistory.setGeometry(QtCore.QRect(490, 360, 80, 30))
        self.btnHistory.setCheckable(False)

        self.btnHistory.clicked.connect(self.cancelMsg)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.btnSend.setText(_translate("Form", "发送"))
        self.btnCancel.setText(_translate("Form", "取消"))
        self.btnHistory.setText(_translate("Form", "历史消息"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())


目标结果如图

img

请帮忙修改一下。

改好了,你可以试试。

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from datetime import datetime
import os

class Ui_Form(object):
    # btnSend按钮与showDialog()绑定
    def showDialog(self):
        data_now = datetime.now()
        label = "Me:{}----" \
            .format(data_now.strftime("%Y-%M-%d %H:%M:%S"))
        # 用toPlainText从输入框提取字符信息
        message = self.outputarea.toPlainText()
        self.show_text = self.chatText.toPlainText() + '\n'
        self.show_text += label
        self.show_text += message
        print(self.show_text)
        self.chatText.setPlainText(self.show_text)
        # 传入消息后清空当前输入框
        self.outputarea.clear()
        # 重新设准备好接受下一次输入
        self.outputarea.setFocus()
        # 将每次输入信息存入程序同目录文本中,转历史消息执行saveMsg(txt)方法
        self.saveMsg(self.show_text)

    # 保存消息到save.txt文件,message参数传换为txt
    def saveMsg(self,txt):
        self.file = open('save.txt', 'a')
        self.file.write(txt + '\n')
        self.file.close()

    # 点击取消为清除函数
    def cancelMsg(self):
        self.outputarea.clear()

    # 判断是否存在历史消息文本,有写入,没有提示No Record
    def getMsg(self):
        if os.path.exists('save.txt'):
            all_text = ''
            message = '\n历史消息显示:'
            file = open('save.txt', 'r')
            txt = file.read() + '\n'
            all_text = all_text + message + txt
            self.chatText.setPlainText(all_text)
            file.close()
        else:
            self.chatText.setPlainText('No Record\n')

    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(600, 400)
        self.chatText = QtWidgets.QPlainTextEdit(Form)
        self.chatText.setGeometry(QtCore.QRect(0, 0, 600, 230))
        font = QtGui.QFont()
        font.setFamily("Adobe 宋体 Std L")
        font.setPointSize(12)
        self.chatText.setFont(font)
        self.chatText.setReadOnly(True)
        self.chatText.setObjectName("chatText")
        self.outputarea = QtWidgets.QPlainTextEdit(Form)
        self.outputarea.setGeometry(QtCore.QRect(0, 250, 600, 100))
        font = QtGui.QFont()
        font.setFamily("Adobe 宋体 Std L")
        font.setPointSize(12)
        self.outputarea.setFont(font)
        self.outputarea.setReadOnly(False)
        self.outputarea.setObjectName("outputarea")
        self.btnSend = QtWidgets.QPushButton(Form)
        self.btnSend.setGeometry(QtCore.QRect(10, 360, 80, 30))

        self.btnSend.clicked.connect(self.showDialog)
        self.btnCancel = QtWidgets.QPushButton(Form)
        self.btnCancel.setGeometry(QtCore.QRect(110, 360, 80, 30))

        self.btnCancel.clicked.connect(self.cancelMsg)
        self.btnHistory = QtWidgets.QPushButton(Form)
        self.btnHistory.setGeometry(QtCore.QRect(490, 360, 80, 30))
        self.btnHistory.setCheckable(False)

        self.btnHistory.clicked.connect(self.getMsg)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.btnSend.setText(_translate("Form", "发送"))
        self.btnCancel.setText(_translate("Form", "取消"))
        self.btnHistory.setText(_translate("Form", "历史消息"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())