use Qt signals to connect to gui
This commit is contained in:
parent
c0fff4e59d
commit
594626ce7e
17
main.py
17
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()
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user