暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Gateio客户端工具

原创 zayki 2022-05-14
363
# -*- coding: utf-8 -*-

'''
@Author  :   zyjsuper
@License :   (C) Copyright 2013-2021
@Contact :   zyj_super@163.com
@File    :   Gateio.py
@Time    :   2021/2/16
'''


import json
import os
import sys
import threading
import time

import requests
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt, QRectF
from PyQt5.QtGui import QCursor, QPainterPath, QPainter, QBrush, QColor
from PyQt5.QtWidgets import QWidget, QCompleter, QApplication, QPushButton

from lxml import etree

class RoundShadow(QWidget):
    """圆角边框类"""

    def __init__(self, parent=None):
        super(RoundShadow, self).__init__(parent)
        self.border_width = 8
        # 设置 窗口无边框和背景透明 *必须
        # self.setAttribute(Qt.WA_TranslucentBackground)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowStaysOnTopHint)


    def paintEvent(self, event):
        # 阴影
        path = QPainterPath()
        path.setFillRule(Qt.WindingFill)

        pat = QPainter(self)
        pat.setRenderHint(pat.Antialiasing)
        pat.fillPath(path, QBrush(Qt.white))

        color = QColor(192, 192, 192, 50)

        for i in range(10):
            i_path = QPainterPath()
            i_path.setFillRule(Qt.WindingFill)
            ref = QRectF(10 - i, 10 - i, self.width() - (10 - i) * 2, self.height() - (10 - i) * 2)
            # i_path.addRect(ref)
            i_path.addRoundedRect(ref, self.border_width, self.border_width)
            color.setAlpha(int(150 - i ** 0.5 * 50))
            pat.setPen(color)
            pat.drawPath(i_path)

        # 圆角
        pat2 = QPainter(self)
        pat2.setRenderHint(pat2.Antialiasing)  # 抗锯齿
        pat2.setBrush(Qt.cyan)
        pat2.setPen(Qt.transparent)

        rect = self.rect()
        rect.setLeft(-1)
        rect.setTop(-1)
        rect.setWidth(rect.width() - 1 )
        rect.setHeight(rect.height() -1 )
        pat2.drawRoundedRect(rect, 8, 8)

class Ui_Gateio(RoundShadow,QWidget):
    def __init__(self):
        super(Ui_Gateio, self).__init__()
        self.setupUi()
        self.proxies = {'http':'http://10.10.105.146','https':'http://10.10.105.146'}

        self.pairs = ['BTC_USDT', 'BCH_USDT', 'ETH_USDT', 'ETC_USDT', 'QTUM_USDT', 'LTC_USDT', 'DASH_USDT', 'ZEC_USDT', 'BTM_USDT', 'EOS_USDT', 'REQ_USDT', 'SNT_USDT', 'OMG_USDT', 'PAY_USDT', 'CVC_USDT', 'ZRX_USDT', 'TNT_USDT', 'XMR_USDT', 'XRP_USDT', 'DOGE_USDT', 'BAT_USDT', 'PST_USDT', 'BTG_USDT', 'DPY_USDT', 'LRC_USDT', 'STORJ_USDT', 'RDN_USDT', 'KNC_USDT', 'LINK_USDT', 'CDT_USDT', 'AE_USDT', 'RLC_USDT', 'RCN_USDT', 'TRX_USDT', 'VET_USDT', 'MCO_USDT', 'FUN_USDT', 'DATA_USDT', 'ZSC_USDT', 'MDA_USDT', 'XTZ_USDT', 'GEM_USDT', 'RFR_USDT', 'ABT_USDT', 'OST_USDT', 'XLM_USDT', 'MOBI_USDT', 'OCN_USDT', 'COFI_USDT', 'JNT_USDT', 'BLZ_USDT', 'GXS_USDT', 'MTN_USDT', 'RUFF_USDT', 'TNC_USDT', 'ZIL_USDT', 'BTO_USDT', 'THETA_USDT', 'DDD_USDT', 'MKR_USDT', 'DAI_USDT', 'SMT_USDT', 'MDT_USDT', 'MANA_USDT', 'LUN_USDT', 'SALT_USDT', 'FUEL_USDT', 'ELF_USDT', 'DRGN_USDT', 'GTC_USDT', 'QLC_USDT', 'DBC_USDT', 'BNTY_USDT', 'ICX_USDT', 'BTF_USDT', 'ADA_USDT', 'LSK_USDT', 'WAVES_USDT', 'BIFI_USDT', 'MDS_USDT', 'QASH_USDT', 'POWR_USDT', 'BCD_USDT', 'SBTC_USDT', 'GOD_USDT', 'BCX_USDT', 'QSP_USDT', 'INK_USDT', 'QBT_USDT', 'TSL_USDT', 'GNX_USDT', 'NEO_USDT', 'GAS_USDT', 'IOTA_USDT', 'NAS_USDT', 'OAX_USDT', 'BCDN_USDT', 'SNET_USDT', 'BTS_USDT', 'USDG_USDT', 'GT_USDT', 'ATOM_USDT', 'ETH2_USDT', 'HARD_USDT', 'KAVA_USDT', 'IRIS_USDT', 'ANT_USDT', 'ANKR_USDT', 'STPT_USDT', 'RSR_USDT', 'RSV_USDT', 'KAI_USDT', 'CTSI_USDT', 'COMP_USDT', 'OCEAN_USDT', 'SC_USDT', 'KSM_USDT', 'FIRO_USDT', 'DOT_USDT', 'MTR_USDT', 'MTRG_USDT', 'SOL_USDT', 'COTI_USDT', 'AMPL_USDT', 'DIGG_USDT', 'GRAP_USDT', 'WNXM_USDT', 'LUNA_USDT', 'AVAX_USDT', 'BZRX_USDT', 'PCX_USDT', 'YAMV2_USDT', 'YAM_USDT', 'BOX_USDT', 'CRV_USDT', 'UNI_USDT', 'SUSHI_USDT', 'AAVE_USDT', 'POLS_USDT', 'ERG_USDT', 'GOF_USDT', 'PHA_USDT', 'SASHIMI_USDT', 'FARM_USDT', 'SWRV_USDT', 'RAZOR_USDT', 'AUCTION_USDT', 'ULU_USDT', 'OIN_USDT', 'AGS_USDT', 'ADEL_USDT', 'TON_USDT', 'KIMCHI_USDT', 'KTON_USDT', 'RING_USDT', 'MINI_USDT', 'CREAM_USDT', 'JGN_USDT', 'DEGO_USDT', 'RFUEL_USDT', 'SFG_USDT', 'NEST_USDT', 'CORE_USDT', 'NEAR_USDT', 'NU_USDT', 'STAKE_USDT', 'ARNX_USDT', 'TRU_USDT', 'ROSE_USDT', 'BADGER_USDT', 'COVER_USDT', 'GLM_USDT', 'BASE_USDT', 'PICKLE_USDT', 'HEGIC_USDT', 'GTH_USDT', 'DUSK_USDT', '88MPH_USDT', 'UNFI_USDT', 'FLM_USDT', 'GHST_USDT', 'LOON_USDT', 'ACH_USDT', 'DUCK_USDT', 'GRT_USDT', 'ESD_USDT', 'ALEPH_USDT', 'FRAX_USDT', 'FXS_USDT', 'BOR_USDT', 'ROOK_USDT', 'BAC_USDT', 'BAS_USDT', 'LON_USDT', 'MAHA_USDT', 'WOZX_USDT', 'FAR_USDT', 'POND_USDT', '1INCH_USDT', 'DSD_USDT', 'OCTO_USDT', 'SHARE_USDT', 'LINA_USDT', 'ONC_USDT', 'ONS_USDT', 'ZKS_USDT', 'FROG_USDT', 'MIS_USDT', 'WHITE_USDT', 'ONX_USDT', 'MATIC_USDT', 'RIF_USDT', 'CRU_USDT', 'PROPS_USDT', 'BIFIF_USDT', 'LAYER_USDT', 'YFDAI_USDT', 'QNT_USDT', 'ARMOR_USDT', 'YOP_USDT', 'BFC_USDT', 'BONDED_USDT', 'STMX_USDT', 'ROOM_USDT', 'GDAO_USDT', 'PAID_USDT', 'UNISTAKE_USDT', 'BOND_USDT', 'FXF_USDT', 'CRBN_USDT', 'TORN_USDT', 'STRONG_USDT', 'UMB_USDT', 'NUX_USDT', 'JASMY_USDT', 'FAST_USDT', 'BEL_USDT', 'WOM_USDT', 'NFTX_USDT', 'PERP_USDT', 'ORAI_USDT', 'CWS_USDT', 'LIT_USDT', 'UNCX_USDT', 'POOLZ_USDT', 'SNOW_USDT', 'DODO_USDT', 'OPIUM_USDT', 'KIF_USDT', 'REEF_USDT', 'BIRD_USDT', 'MAPS_USDT', 'MIR_USDT', 'SFIL_USDT', 'ZCN_USDT', 'MARS_USDT', 'BAO_USDT', 'LPT_USDT', 'DIS_USDT', 'DEXE_USDT', 'PBTC35A_USDT', 'ORN_USDT', 'NORD_USDT', 'DAO_USDT', 'FLOW_USDT', 'ALPHA_USDT', 'ENJ_USDT', 'API3_USDT', 'FIN_USDT', 'SKL_USDT', 'PRQ_USDT', 'FRONT_USDT', 'INJ_USDT', 'ALPA_USDT', 'ROOBEE_USDT', 'NSURE_USDT', 'KP3R_USDT', 'WOO_USDT', 'HYVE_USDT', 'KFC_USDT', 'RAMP_USDT', 'SYLO_USDT', 'RARI_USDT', 'DVP_USDT', 'MPH_USDT', 'DF_USDT', 'CVP_USDT', 'VALUE_USDT', 'UMA_USDT', 'YFII_USDT', 'SWAP_USDT', 'SXP_USDT', 'BAL_USDT', 'BAND_USDT', 'AST_USDT', 'TROY_USDT', 'OM_USDT', 'SPA_USDT', 'AKRO_USDT', 'FOR_USDT', 'CREDIT_USDT', 'DIA_USDT', 'AXIS_USDT', 'TRB_USDT', 'LIEN_USDT', 'PEARL_USDT', 'CORN_USDT', 'SLM_USDT', 'SAL_USDT', 'TAI_USDT', 'CRT_USDT', 'JFI_USDT', 'MTA_USDT', 'YFI_USDT', 'KIN_USDT', 'DKA_USDT', 'REN_USDT', 'DOS_USDT', 'SUTER_USDT', 'SRM_USDT', 'JST_USDT', 'LBK_USDT', 'BTMX_USDT', 'NSBT_USDT', 'WEST_USDT', 'XEM_USDT', 'BU_USDT', 'HNS_USDT', 'BTC3L_USDT', 'BTC3S_USDT', 'BTC5L_USDT', 'BTC5S_USDT', 'BCH5L_USDT', 'BCH5S_USDT', 'DOT5L_USDT', 'DOT5S_USDT', 'XRP5L_USDT', 'XRP5S_USDT', 'BSV5L_USDT', 'BSV5S_USDT', 'LTC5L_USDT', 'LTC5S_USDT', 'EOS5L_USDT', 'EOS5S_USDT', 'ETH5L_USDT', 'ETH5S_USDT', 'LINK3L_USDT', 'LINK3S_USDT', 'KAVA3L_USDT', 'KAVA3S_USDT', 'EGLD3L_USDT', 'EGLD3S_USDT', 'CHZ3L_USDT', 'CHZ3S_USDT', 'MKR3L_USDT', 'MKR3S_USDT', 'LRC3L_USDT', 'LRC3S_USDT', 'BAL3L_USDT', 'BAL3S_USDT', 'JST3L_USDT', 'JST3S_USDT', 'SERO3L_USDT', 'SERO3S_USDT', 'VET3L_USDT', 'VET3S_USDT', 'THETA3L_USDT', 'THETA3S_USDT', 'ZIL3L_USDT', 'ZIL3S_USDT', 'GRIN3L_USDT', 'GRIN3S_USDT', 'BEAM3L_USDT', 'BEAM3S_USDT', 'SOL3L_USDT', 'SOL3S_USDT', 'SKL3L_USDT', 'SKL3S_USDT', '1INCH3L_USDT', '1INCH3S_USDT', 'LON3L_USDT', 'LON3S_USDT', 'DOGE3L_USDT', 'DOGE3S_USDT', 'GRT3L_USDT', 'GRT3S_USDT', 'BNB3L_USDT', 'BNB3S_USDT', 'TRX3L_USDT', 'TRX3S_USDT', 'ATOM3L_USDT', 'ATOM3S_USDT', 'AVAX3L_USDT', 'AVAX3S_USDT', 'NEAR3L_USDT', 'NEAR3S_USDT', 'ROSE3L_USDT', 'ROSE3S_USDT', 'ZEN3L_USDT', 'ZEN3S_USDT', 'QTUM3L_USDT', 'QTUM3S_USDT', 'XLM3L_USDT', 'XLM3S_USDT', 'XRP3L_USDT', 'XRP3S_USDT', 'CFX3L_USDT', 'CFX3S_USDT', 'BCHA3L_USDT', 'BCHA3S_USDT', 'OMG3L_USDT', 'OMG3S_USDT', 'ALGO3L_USDT', 'ALGO3S_USDT', 'WAVES3L_USDT', 'WAVES3S_USDT', 'NEO3L_USDT', 'NEO3S_USDT', 'ONT3L_USDT', 'ONT3S_USDT', 'ETC3L_USDT', 'ETC3S_USDT', 'CVC3L_USDT', 'CVC3S_USDT', 'SNX3L_USDT', 'SNX3S_USDT', 'ADA3L_USDT', 'ADA3S_USDT', 'DASH3L_USDT', 'DASH3S_USDT', 'AAVE3L_USDT', 'AAVE3S_USDT', 'SRM3L_USDT', 'SRM3S_USDT', 'KSM3L_USDT', 'KSM3S_USDT', 'BTM3L_USDT', 'BTM3S_USDT', 'ZEC3L_USDT', 'ZEC3S_USDT', 'XMR3L_USDT', 'XMR3S_USDT', 'AMPL3L_USDT', 'AMPL3S_USDT', 'CRV3L_USDT', 'CRV3S_USDT', 'COMP3L_USDT', 'COMP3S_USDT', 'YFII3L_USDT', 'YFII3S_USDT', 'YFI3L_USDT', 'YFI3S_USDT', 'HT3L_USDT', 'HT3S_USDT', 'OKB3L_USDT', 'OKB3S_USDT', 'UNI3L_USDT', 'UNI3S_USDT', 'DOT3L_USDT', 'DOT3S_USDT', 'FIL3L_USDT', 'FIL3S_USDT', 'SUSHI3L_USDT', 'SUSHI3S_USDT', 'ETH3L_USDT', 'ETH3S_USDT', 'EOS3L_USDT', 'EOS3S_USDT', 'BSV3L_USDT', 'BSV3S_USDT', 'BCH3L_USDT', 'BCH3S_USDT', 'LTC3L_USDT', 'LTC3S_USDT', 'XTZ3L_USDT', 'XTZ3S_USDT', 'BSV_USDT', 'RVN_USDT', 'RVC_USDT', 'AR_USDT', 'TIPS_USDT', 'DCR_USDT', 'BCN_USDT', 'XMC_USDT', 'NBS_USDT', 'STEEM_USDT', 'HIVE_USDT', 'COCOS_USDT', 'BCHA_USDT', 'ATP_USDT', 'NAX_USDT', 'KLAY_USDT', 'NBOT_USDT', 'QI_USDT', 'MED_USDT', 'GRIN_USDT', 'BEAM_USDT', 'HBAR_USDT', 'OKB_USDT', 'REP_USDT', 'STAR_USDT', 'ZEN_USDT', 'ABBC_USDT', 'FIL_USDT', 'FIC_USDT', 'FIL6_USDT', 'SUP_USDT', 'STOX_USDT', 'VTHO_USDT', 'VIDYX_USDT', 'BTT_USDT', 'WINGS_USDT', 'TFUEL_USDT', 'CELR_USDT', 'CS_USDT', 'MAN_USDT', 'REM_USDT', 'LYM_USDT', 'ZPT_USDT', 'ONG_USDT', 'WING_USDT', 'ONT_USDT', 'BFT_USDT', 'IHT_USDT', 'SENC_USDT', 'TOMO_USDT', 'ELEC_USDT', 'SNX_USDT', 'SWTH_USDT', 'NKN_USDT', 'SOUL_USDT', 'LRN_USDT', 'EOSDAC_USDT', 'DOCK_USDT', 'GSE_USDT', 'RATING_USDT', 'HSC_USDT', 'HIT_USDT', 'DX_USDT', 'CNNS_USDT', 'DREP_USDT', 'MBL_USDT', 'GMAT_USDT', 'MIX_USDT', 'LAMB_USDT', 'LEO_USDT', 'BTCBULL_USDT', 'BTCBEAR_USDT', 'ETHBEAR_USDT', 'ETHBULL_USDT', 'EOSBULL_USDT', 'EOSBEAR_USDT', 'XRPBEAR_USDT', 'XRPBULL_USDT', 'WICC_USDT', 'WGRT_USDT', 'SERO_USDT', 'CORAL_USDT', 'VIDY_USDT', 'KGC_USDT', 'FTM_USDT', 'RUNE_USDT', 'COS_USDT', 'CBK_USDT', 'CHZ_USDT', 'XVS_USDT', 'TWT_USDT', 'AVA_USDT', 'CRO_USDT', 'ALY_USDT', 'WIN_USDT', 'SUN_USDT', 'MTV_USDT', 'ONE_USDT', 'ARPA_USDT', 'DILI_USDT', 'ALGO_USDT', 'PI_USDT', 'CKB_USDT', 'BKC_USDT', 'BXC_USDT', 'PAX_USDT', 'USDC_USDT', 'TUSD_USDT', 'HC_USDT', 'GARD_USDT', 'CELO_USDT', 'HPB_USDT', 'CFX_USDT', 'FTI_USDT', 'SOP_USDT', 'LEMO_USDT', 'QKC_USDT', 'IOTX_USDT', 'RED_USDT', 'LBA_USDT', 'OPEN_USDT', 'MITH_USDT', 'SKM_USDT', 'XVG_USDT', 'NANO_USDT', 'STRAX_USDT', 'EDG_USDT', 'STX_USDT', 'EGLD_USDT', 'OKT_USDT', 'FIS_USDT', 'HT_USDT', 'MDX_USDT', 'BAGS_USDT', 'CIR_USDT', 'BNB_USDT', 'MET_USDT', 'TCT_USDT', 'MXC_USDT']
        self.completer = QCompleter(self.pairs)
        self.completer.setCompletionMode(QCompleter.PopupCompletion)
        self.lineEdit.setCompleter(self.completer)
        self.flag = 0

    def setupUi(self):
        self.setFixedSize(382, 33)
       # Gateio.setAttribute(Qt.WA_TranslucentBackground)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowStaysOnTopHint)
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        font.setFamily("微软雅黑 Light")
        self.lineEdit = QtWidgets.QLineEdit(self)
        self.lineEdit.setFont(font)
        self.lineEdit.setEnabled(True)
        self.lineEdit.setGeometry(QtCore.QRect(2, 2, 95, 29))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lineEdit.sizePolicy().hasHeightForWidth())
        self.lineEdit.setSizePolicy(sizePolicy)
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QPushButton(self)
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        self.pushButton.setFont(font)
        self.pushButton.setGeometry(QtCore.QRect(350, 2, 29, 29))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.setStyleSheet(''' 
                                        QPushButton
                                        {text-align : center;
                                        background-color : cyan;
                                        font: bold;
                                        border-color: cyan;
                                        border-width: 1px;
                                        border-radius: 3px;
                                        padding: 1px;
                                        height : 14px;
                                        border-style: outset;
                                        font : 20px;}
                                        QPushButton:hover
                                        {text-align : center;
                                        background-color : white;
                                        font: bold;
                                        border-color: white;
                                        border-width: 1px;
                                        border-radius: 5px;
                                        padding: 1px;
                                        height : 14px;
                                        border-style: outset;
                                        font : 20px;}
                                        ''')
        self.lcdNumber = QtWidgets.QLCDNumber(self)
        self.lcdNumber.setGeometry(QtCore.QRect(99, 2, 161, 29))
        self.lcdNumber.setFrameShape(QtWidgets.QFrame.Panel)
        self.lcdNumber.setFrameShadow(QtWidgets.QFrame.Raised)
        self.lcdNumber.setDigitCount(12)
        self.lcdNumber.setProperty("value", 0.0)
        self.lcdNumber.setObjectName("lcdNumber")
        self.lcdNumber_2 = QtWidgets.QLCDNumber(self)
        self.lcdNumber_2.setGeometry(QtCore.QRect(260, 2, 91, 29))
        self.lcdNumber_2.setFrameShape(QtWidgets.QFrame.Panel)
        self.lcdNumber_2.setFrameShadow(QtWidgets.QFrame.Raised)
        self.lcdNumber_2.setObjectName("lcdNumber_2")

        self.retranslateUi(self)
        QtCore.QMetaObject.connectSlotsByName(self)
        self.pushButton.clicked.connect(self.get_result)

    def retranslateUi(self, Gateio):
        _translate = QtCore.QCoreApplication.translate
        Gateio.setWindowTitle(_translate("Gateio", "Gateio"))
        self.pushButton.setText(_translate("Gateio", chr(9655)))
        # 空心右指三角 -- 9655

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_flag = True
            self.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标

    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:
            self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置
            QMouseEvent.accept()

    def mouseReleaseEvent(self, QMouseEvent):
        self.m_flag = False
        self.setCursor(QCursor(Qt.ArrowCursor))


    def get_result(self):

        if self.flag == 0:
            self.pushButton.setText(chr(9633))
            self.flag = 1
            def _get_result():
                pair_name = self.lineEdit.text()
                if pair_name != "":
                    while True:
                        self.get_ticket_info(pair_name)
                        self.lcdNumber.display(self.price)
                        self.lcdNumber_2.display(self.percentChange)
                        time.sleep(10)

            threading.Thread(target=_get_result,daemon=True).start()

        elif self.flag == 1:
            exit(0)

    def get_ticket_info(self, pairname):
        self.pair_name = pairname
        self.url = 'https://www.gateio.tv/cn/trade/' + self.pair_name

        try:
            self.resq = requests.get(self.url, timeout=5, verify=False)
            html = etree.HTML(self.resq.text)
            self.price = html.xpath('//*[@id="lrVal"]//text()')[0]
            self.percentChange = html.xpath('//*[@id="currRateNum"]//text()')[0]
        except:
            self.price = '0'
            self.percentChange = '0'

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = Ui_Gateio()
    MainWindow.show()
    sys.exit(app.exec_())
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论