ソースを参照

Add multi-line chat

master
Noëlle Anthony 6年前
コミット
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)

読み込み中…
キャンセル
保存