瀏覽代碼

Add multi-line chat

master
Noëlle Anthony 5 年之前
父節點
當前提交
dcaadfb5a3
共有 3 個檔案被更改,包括 36 行新增16 行删除
  1. 2
    0
      README.md
  2. 2
    1
      config.ini
  3. 32
    15
      main.py

+ 2
- 0
README.md 查看文件



List the `users` you'd like to include in the chat, separated by commas. List the `users` you'd like to include in the chat, separated by commas.


List `colors` for each user, using RGB hexadecimal codes (like #ff0000 for bright red). If a user isn't assigned a color, their text will be black (#000000).

### Usage ### Usage


`> python3 main.py` `> python3 main.py`

+ 2
- 1
config.ini 查看文件

logfile = chat.log logfile = chat.log
sizew = 640 sizew = 640
sizeh = 480 sizeh = 480
users = MyName, MyOtherName
users = MyName, MyOtherName
colors = #cc0000, #00cc00

+ 32
- 15
main.py 查看文件

from PySide2 import QtWidgets as qt from PySide2 import QtWidgets as qt
from PySide2 import QtCore as qtc from PySide2 import QtCore as qtc
from PySide2.QtGui import QColor
import configparser, sys, os import configparser, sys, os
from datetime import datetime as dt from datetime import datetime as dt


set_debug = False set_debug = False


class TextLine: class TextLine:
def __init__(self, username, textarea, timestamp, logfile):
def __init__(self, username, color, textarea, timestamp, logfile):
self.username = username self.username = username
self.color = "#000000" if color == "" else color
self.qcolor = QColor(int(self.color[1:3], 16), int(self.color[3:5], 16), int(self.color[5:7], 16))
self.label = qt.QLabel("&{}:".format(username)) self.label = qt.QLabel("&{}:".format(username))
self.message = qt.QLineEdit()
self.message.returnPressed.connect(self.pressButton)
self.message = qt.QPlainTextEdit()
self.message.keyPressEvent = self.isItEnter
self.message.setMaximumSize(600, 40)
self.textarea = textarea self.textarea = textarea
self.label.setBuddy(self.message) self.label.setBuddy(self.message)
self.timestamp = timestamp self.timestamp = timestamp
self.logfile = logfile self.logfile = logfile
def pressButton(self):
if self.timestamp:
t = dt.now()
o = "[{}] {}: {}".format(t.strftime("%H:%M:%S"), self.username, self.message.text())
def isItEnter(self, event):
if event.key() == qtc.Qt.Key_Enter or event.key() == qtc.Qt.Key_Return:
mod = qt.QApplication.keyboardModifiers()
if mod == qtc.Qt.ShiftModifier:
self.message.insertPlainText("\n")
else:
sentText = self.message.toPlainText()
sentText = sentText.replace("\n", "\t\n")
if self.timestamp:
t = dt.now()
o = "[{}] {}: {}".format(t.strftime("%H:%M:%S"), self.username, sentText)
else:
o = "{}: {}".format(self.username, sentText)
self.textarea.setTextColor(self.qcolor)
self.textarea.append(o)
if self.logfile != "":
with open(self.logfile, "a", encoding="utf8") as file:
file.write(o + "\n")
self.message.clear()
else: else:
o = "{}: {}".format(self.username, self.message.text())
self.textarea.append(o)
if self.logfile != "":
with open(self.logfile, "a", encoding="utf8") as file:
file.write(o + "\n")
self.message.clear()
qt.QPlainTextEdit.keyPressEvent(self.message, event)


def toString(self): def toString(self):
print(self.username) print(self.username)


debug("Getting users...") debug("Getting users...")
users = [x.strip() for x in cfg["users"].split(",")] users = [x.strip() for x in cfg["users"].split(",")]
colors = [x.strip() for x in cfg["colors"].split(",")]
while len(colors) < len(users):
colors.append("#000000")
debug("Users are {}".format(users)) debug("Users are {}".format(users))
inputs = [] inputs = []
for user in users:
ipt = TextLine(user, text_area, timestamp, cfg["logfile"])
for i in range(len(users)):
ipt = TextLine(users[i], colors[i], text_area, timestamp, cfg["logfile"])
inputs.append(ipt) inputs.append(ipt)
for ipt in inputs: for ipt in inputs:
layout.addWidget(ipt.label) layout.addWidget(ipt.label)

Loading…
取消
儲存