diff --git a/main.py b/main.py index 0dd9dfe..12b200f 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,9 @@ from argparse import ArgumentParser, Namespace from threading import Thread -from src import config, gui, trader, clipboard +from src import config, trader, clipboard +# from src import gui +from src.pyside6 import gui_pyside6 from src.data import compile_regex, log @@ -19,10 +21,13 @@ if __name__ == "__main__": conf = config.read_config(args.configfile) log.debug('Compiling regex') compile_regex(conf) - app = gui.Gui() - reader_thread = Thread(target=trader.read_log, args=(conf['General']['log_file'], app)) + # app = gui.Gui() + app, window = gui_pyside6.start_app() + reader = trader.Log_Reader(window) + reader_thread = Thread(target=reader.read_log, args=(conf['General']['log_file'], window)) log.debug(f'Starting reader thread for "{conf["General"]["log_file"]}"') reader_thread.start() - clipboard_thread = Thread(target=clipboard.clipboard_poll, args=(app,)) - clipboard_thread.start() - app.mainloop() + # clipboard_thread = Thread(target=clipboard.clipboard_poll, args=(app,)) + # clipboard_thread.start() + app.exec() + # app.mainloop() diff --git a/src/pyside6/gui_pyside6.py b/src/pyside6/gui_pyside6.py index 2149984..d7c4920 100644 --- a/src/pyside6/gui_pyside6.py +++ b/src/pyside6/gui_pyside6.py @@ -4,6 +4,7 @@ from src.data import Message, compile_regex from src.pyside6.trade_widget import TradeCollection from PySide6 import QtCore from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QTabWidget +import qdarktheme class MainWindow(QMainWindow): @@ -22,6 +23,7 @@ class MainWindow(QMainWindow): self.main_widget.tabCloseRequested.connect(self.del_tab) self.setCentralWidget(self.main_widget) + @QtCore.Slot() def new_trade(self, message: Message): if message.trade: unique_item = message.trade.unique_item() @@ -48,6 +50,14 @@ class MainWindow(QMainWindow): self.hide() +def start_app(): + app = QApplication(sys.argv) + qdarktheme.setup_theme() + app.setStyle('Material') + + window = MainWindow() + return app, window + if __name__ == "__main__": conf = config.read_config(r'config.yaml') compile_regex(conf) @@ -60,16 +70,13 @@ if __name__ == "__main__": message = Message.from_text(text) message2 = Message.from_text(text2) message3 = Message.from_text(text3) - app = QApplication(sys.argv) - app.setStyle('Material') - - window = MainWindow() assert message assert message2 assert message3 + app, window = start_app() window.new_trade(message) window.new_trade(message) window.new_trade(message2) window.new_trade(message3) - app.exec() + diff --git a/src/trader.py b/src/trader.py index b75968f..91da799 100644 --- a/src/trader.py +++ b/src/trader.py @@ -3,27 +3,35 @@ from .data import Message from . import gui from .data import log from io import TextIOWrapper +from PySide6 import QtCore -def read_log(logfile: str, app: gui.Gui) -> None: - try: - with open(logfile, 'r', encoding='utf8') as file: - loglines = follow(file) - for line in loglines: - message = Message.from_text(line) - log.debug(message) - if message and message.trade and message.to_from == 'From': - log.debug(message.trade) - app.add_tab(30, message) - except IOError: - log.error(f'Error opening log file {logfile}.') +class Log_Reader(QtCore.QObject): + new_trade_signal = QtCore.Signal(Message) + def __init__(self, window): + super().__init__() + self.new_trade_signal.connect(window.new_trade, QtCore.Qt.QueuedConnection) -def follow(thefile: TextIOWrapper): - thefile.seek(0, 2) - while True: - line = thefile.readline() - if not line: - time.sleep(0.1) - continue - yield line + def read_log(self, logfile: str, app) -> None: + try: + with open(logfile, 'r', encoding='utf8') as file: + loglines = self.follow(file) + for line in loglines: + message = Message.from_text(line) + log.debug(message) + if message and message.trade and message.to_from == 'From': + log.debug(message.trade) + # app.add_tab(30, message) + self.new_trade_signal.emit(message) + except IOError: + log.error(f'Error opening log file {logfile}.') + + def follow(self, thefile: TextIOWrapper): + thefile.seek(0, 2) + while True: + line = thefile.readline() + if not line: + time.sleep(0.1) + continue + yield line