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