use Qt signals to connect to gui

This commit is contained in:
Oliver Hartmann 2023-01-04 15:02:34 +01:00
parent c0fff4e59d
commit 594626ce7e
3 changed files with 51 additions and 31 deletions

17
main.py
View File

@ -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()

View File

@ -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()

View File

@ -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