From c78e5f521a6bd93de2e553cda6d0eee58de46347 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 09 六月 2023 18:06:44 +0800 Subject: [PATCH] 看盘页面优化 --- main.py | 129 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 120 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 5b6dfe8..1074e2e 100644 --- a/main.py +++ b/main.py @@ -6,18 +6,23 @@ from multiprocessing import freeze_support import sys import torch +from PyQt5.QtGui import QFont, QPalette, QColor, QTextOption from PyQt5.QtWebChannel import QWebChannel from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineSettings -from PyQt5.QtWidgets import QMainWindow, QApplication, QAction, QMessageBox +from PyQt5.QtWidgets import QMainWindow, QApplication, QAction, QMessageBox, QLabel, QDialog, QVBoxLayout, QPushButton, \ + QWidget from PyQt5.QtCore import Qt, pyqtSlot, QObject, pyqtSignal, QTimer, QUrl, QPoint import gui_wx import network_util import setting +import tool freeze_support() + +URL_MSG_LIST = "http://192.168.3.252/kp/msg_list.html" class BaseBridgeClass(QObject): @@ -57,6 +62,11 @@ print("socket_request", text) return network_util.socket_request(json.loads(text)) + # 鑾峰彇瀹㈡埛绔疘D + @pyqtSlot(result=str) + def get_client(self): + return setting.get_client() + class JSBridgeClass(BaseBridgeClass): @@ -73,16 +83,80 @@ def set_trade_info(self, code, name, trade_data, trade_record, initiative_buy_codes, passive_buy_codes): self.window.set_trade_data(code, name, trade_data, trade_record, initiative_buy_codes, passive_buy_codes) - @pyqtSlot(str, str) - def show_want_codes(self, plate, codes): - WantBuyWindow(plate, json.loads(codes)).show() + +class MessageWindow(QMainWindow): + msgChange = pyqtSignal(str) + + def __setMsg(self, msg): + print("鏀跺埌淇℃伅锛�", msg) + self.label.setText(msg) + self.show() + self.timer.stop() + self.timer.start(5000) + + # 璁剧疆淇℃伅 + def setMsg(self, msg): + self.msgChange.emit(msg) + + def __init__(self): + super().__init__() + window_height = 80 + padding = 10 + window_info = setting.get_float_watch_window_info() + if window_info: + self.move(window_info[0] + padding - 3, window_info[1] - window_height - 30) + self.resize(window_info[2] - (padding - 2) * 2, window_height) + else: + self.resize(300, 50) + self.setWindowTitle("娑堟伅鎻愮ず") + self.setWindowFlag(Qt.WindowStaysOnTopHint, True) + self.setWindowOpacity(0.9) + # 鍘绘帀鏍囬鏍� + # self.setWindowFlags(Qt.FramelessWindowHint) + # 鍒犻櫎鏈�澶ф渶灏忓寲鎸夐挳 + # self.setWindowFlags(self.windowFlags() & ~Qt.WindowMaximizeButtonHint & ~Qt.WindowMinimizeButtonHint) + + font = QFont('寰蒋闆呴粦', 12) # 璁剧疆瀛椾綋涓哄井杞泤榛戯紝瀛楀彿涓�12 + palette = QPalette() # 鍒涘缓涓�涓皟鑹叉澘 + palette.setColor(QPalette.WindowText, QColor(255, 0, 0)) # 璁剧疆瀛椾綋棰滆壊涓虹孩鑹� + + self.label = QLabel(self) + self.label.setStyleSheet(f"padding: {padding}px;") + self.label.setFont(font) + self.label.setPalette(palette) # 灏嗚璋冭壊鏉垮簲鐢ㄥ埌QLabel涓� + self.label.setAlignment(Qt.AlignTop) + self.label.resize(self.width(), self.height()) + # 璁剧疆澶氳鏄剧ず + self.label.setWordWrap(True) # 璁剧疆Label鐨勮嚜鍔ㄦ崲琛� + + self.timer = QTimer() + self.timer.timeout.connect(self.close) + # 鍙繍琛�1娆″畾鏃跺櫒 + self.timer.setSingleShot(True) + self.msgChange.connect(self.__setMsg) -class WantBuyWindow(QMainWindow): - def __init__(self, plate, codes): - super(WantBuyWindow, self).__init__() - self.setWindowTitle(f'鎯充拱鍗�({plate})') - self.resize(300, 200) +class MsgListWindow(QMainWindow): + + def __init__(self): + super().__init__() + self.setWindowTitle('鍘嗗彶娑堟伅') + # 绐楀彛缃《 + self.setWindowFlag(Qt.WindowStaysOnTopHint, True) + self.resize(500, 800) + self.webview = QWebEngineView() + self.webview.settings().setAttribute(QWebEngineSettings.JavascriptEnabled, True) + self.webview.page().setZoomFactor(1) + self.setCentralWidget(self.webview) + + # JS妗ヨ缃� + channel = QWebChannel(self.webview.page()) + self.webview.page().setWebChannel(channel) + self.python_bridge = BaseBridgeClass(self.webview) + channel.registerObject("Bridge", self.python_bridge) + + def loadUrl(self, url): + self.webview.load(QUrl(url)) class SecondWindow(QMainWindow): @@ -164,6 +238,7 @@ def set_target_code(self, code): print("set_target_code") self.webview.page().runJavaScript(f"app.set_target_code('{code}')") + self.wx_pipe.send(json.dumps({"type": "set_code", "code": code})) # 鑿滃崟鍙婅彍鍗曠偣鍑讳簨浠� def __menu(self): @@ -217,6 +292,10 @@ def __show_second_window(): self.secondWindow.show() + def __show_his_msg_window(): + self.msgListWindow.loadUrl(URL_MSG_LIST) + self.msgListWindow.show() + # 娓呴櫎娴忚鍣ㄧ紦瀛� def __clear_webview_cache(): self.webview.page().profile().clearHttpCache() @@ -263,6 +342,10 @@ action.triggered.connect(__show_main_callback) view_.addAction(action) + action = QAction("&鎵撳紑鍘嗗彶娑堟伅", self) + action.triggered.connect(__show_his_msg_window) + view_.addAction(action) + def __init__(self, wx_pipe): super().__init__() self.wx_pipe = wx_pipe @@ -297,6 +380,16 @@ # 缁戝畾妲藉嚱鏁� self.signal_update_code.connect(self.set_target_code) + # self.statusBar().showMessage("杩欐槸鏉℃祴璇曟暟鎹", 10000) + + self.messageWindow = MessageWindow() + self.msgListWindow = MsgListWindow() + + # 寮�鍚秷鎭洃鍚� + t1 = threading.Thread(target=self.read_msg) + # 鍚庡彴杩愯 + t1.setDaemon(True) + t1.start() def closeEvent(self, event): event.accept() @@ -307,6 +400,24 @@ self.wx_pipe.send(json.dumps({"type": "exit"})) sys.exit(0) + # 璇诲彇娑堟伅 + def read_msg(self): + client = setting.get_client() + if not client: + client = 'hxh' + while True: + if tool.is_trade_time(): + try: + res = network_util.http_get(f"/pull_kp_client_msg?client=" + client.strip()) + if res: + res = json.loads(res) + if res["code"] == 0: + print("鎷夊彇鍒版秷鎭�", res) + self.messageWindow.setMsg(res["data"]) + except: + pass + time.sleep(0.5) + # 鎵撳寘鍛戒护 # cd D:\workspace\GP\trade_desk -- Gitblit v1.8.0