【Python开发利器-TKinterDesigner 】 :实例精讲:使用TkinterDesinger开发股票监控报警器

【Python开发利器-TKinterDesigner 】 :实例精讲:使用TKinterDesigner开发股票监控报警器

TKinterDesigner QQ群:100180960

本节视频教程如下:https://www.bilibili.com/video/BV1LV411r7uc/

使用TkinterDesinger开发股票监控报警器

          大家好,度过了一个无聊的周末,想毕很多朋友在等着周一的A股开盘吧,上周的连续调整,使很多人的账户利润大幅缩水,甚至亏钱,这可如何是好?

          我思钱想去,终于明白,人的情绪在A股走势面前,不过就是一坨屎,只有强大的AI,科学分析,才能战胜恐惧和贪婪,到达利润的彼岸。

          哈哈哈,言归正传,这一节,我教大家使用TKinterDesigner来开发一个股票监控器,帮助你锁定心中牛股,工作时做到“手中有股,心中无股!”。

          好,在开始之前,我们先准备一下今天的食材:

          打开:https://github.com/honghaier-game/TKinterDesigner, 下载V1.3.5。

          然后,洗干净手,打开TKinterDesigner,创建一个新的空工程。

          然后我们来设计一下产品的功能:

【Python开发利器-TKinterDesigner 】 :实例精讲:使用TkinterDesinger开发股票监控报警器_第1张图片

           我们希望能有一个监控的股票池,将输入的股票代码,最高和最低限价设置好放入股票监控池。启动监控后,每秒进行刷新,如果股价超过最高限价或最低限价后,会向我们的手机号发送短信通知。

          好的,在主窗体中,从控件面板拖拽Label,Button,Entry,TreeView,并修改文本和数据数据,设计好的界面如下:

【Python开发利器-TKinterDesigner 】 :实例精讲:使用TkinterDesinger开发股票监控报警器_第2张图片

                 然后,我们需要为股票池对应的视图控件TreeView增加一个绑定变量:StockArray数组。用来存放股票池中的股票信息(股票代码,最高和最低限价)。好的,这样界面就做好了。

 

           我们现在新建一个Python文件,定名为StockMonitor.py,然后我们在这里对所需要主要功能进行封装。

           一。股票信息获取:我们在这里使用到tushare这个财经库,通过pip install tushare可以安装一下,然后我们就可以调用其中的get_realtime_quotes接口对股票进行实时监控了。

def getStockInfo(stock_code):
    df = ts.get_realtime_quotes(stock_code)
    # e = df[['code','name','time','price']]
    c = df[u'code']
    n = df[u'name']
    t = df[u'time']
    p = df[u'price']
    text = c[0] + " " + n[0] + " " + t[0] + " " + p[0]
    print(text)
    return df

 

            二。发送短信服务:我们在这里使用到twilio这个国外的短信发送服务,注册后,获取一个免费的试用手机号,然后将我们的手机号进行绑定验证,通过后就可以得到账户的SID和一个TOKEN,在 twilio的官网上,详细的针对各种开发语言做了使用说明,建议大家通过访问 https://www.twilio.com/ 进行尝试。

        account_sid = ""#改成申请的SID
        auth_token = ""#改成申请的TOKEN
        client = Client(account_sid, auth_token)
        smsText = "Stock:600050 Price 5.55"
        #from_改成得到的试用手机号
        #to改成接手消息的手机号,但要记得+86哦                 
        client.messages.create(to="+8613488888888",from_="+13343784863",body=smsText)

 

           这两个功能,在网上都有很多介绍,在这里就不一一详解了。有了这两个重要的功能库辅助,其实开发这个监控很简单了。

 

下面是我们自定类StockMonitor.py的代码:

import os
import time
import tushare as ts
import pandas as pd
import threading
from twilio.rest import Client
threadactive = True
def getStockInfo(stock_code):
    df = ts.get_realtime_quotes(stock_code)
    # e = df[['code','name','time','price']]
    c = df[u'code']
    n = df[u'name']
    t = df[u'time']
    p = df[u'price']
    text = c[0] + " " + n[0] + " " + t[0] + " " + p[0]
    print(text)
    return df
class StockMonitor:
    def __init__(self):
        self.StockArray = []
        self.TreeView = None
        self.PhoneNumber = None
        self.Run_Function = None
    def addStock(self,StockCode,MaxPrice,MinPrice):
        self.StockArray.append([StockCode,MaxPrice,MinPrice,False,False])
    def SetMonitorInfo(self,TreeView,PhoneNumber):
        self.TreeView = TreeView
        self.PhoneNumber = PhoneNumber
    def StartMonitoring(self):
        account_sid = ""#改成申请的SID
        auth_token = ""#改成申请的TOKEN
        client = Client(account_sid, auth_token)
        all_items = self.TreeView.get_children()    
        for item in all_items:
            self.TreeView.delete(item)
        for stock_code in self.StockArray:
            df = ts.get_realtime_quotes(stock_code[0])
            e = df[['code','name','price','time']]
            c = df[u'code']
            n = df[u'name']
            p = df[u'price']
            t = df[u'time']
            print(e)
            if float(p[0]) > float(stock_code[2]) :
                self.TreeView.insert('','end',values=(c[0],n[0],t[0],p[0],stock_code[2],stock_code[1],"超过上限"))
                if stock_code[3] == False:
                    # smsText = "您的股票"+n[0]+"("+c[0]+") 已超过设定上限价格"+ stock_code[2] + ",当前价格"+p[0]+",请及时关注!"
                    smsText = "Stock:"+"("+c[0]+") Price:"+p[0]
                    #from_改成得到的试用手机号
                    client.messages.create(to=self.PhoneNumber,from_="+13343784863",body=smsText)
                    stock_code[3] = True
            elif float(p[0]) < float(stock_code[1]):
                self.TreeView.insert('','end',values=(c[0],n[0],t[0],p[0],stock_code[2],stock_code[1],"低于下限"))
                if stock_code[4] == False:
                    # smsText = "您的股票"+n[0]+"("+c[0]+") 已低于设定下限价格"+ stock_code[1] + ",当前价格"+p[0]+",请及时关注!"
                    smsText = "Stock:"+"("+c[0]+") Price:"+p[0]
                    print(smsText)
                    #from_改成得到的试用手机号
                    client.messages.create(to=self.PhoneNumber,from_="+13343784863",body=smsText)
                    stock_code[4] = True
            else:
                self.TreeView.insert('','end',values=(c[0],n[0],t[0],p[0],stock_code[1],stock_code[2],"平稳波动"))
        self.Run_Function = self.TreeView.after(1000, self.StartMonitoring)
    def StopMonitoring(self):
        self.TreeView.after_cancel(self.Run_Function)
        self.StockArray = []

           我们在这个类里,通过addStock将股票信息加入到监控池中,在SetMonitorInfo里专入股票池对应的TreeView和警报接收的手机号。

           当我们在界面上按下启动监控按钮时,则调用StartMonitoring,并同时将按钮文字改为“停止监控”,再次按下后,则停止监控并恢复文字为“启动监控”。

           有了这个类代码,我们回到TKinterDesigner。我们在“增加股票”按钮上右键,弹出“事件响应”,然后为"Command"增加函数代码:

def Button_4_onCommand(className,widgetName):
    StockCode = Fun.GetUIText(className,"Entry_3")
    StockInfo = StockMonitor.getStockInfo(StockCode)
    StockCode = StockInfo[u'code']
    StockName = StockInfo[u'name']
    StockTime = StockInfo[u'time']
    StockPrice = StockInfo[u'price']
    MaxPrice = Fun.GetUIText(className,"Entry_10")
    MinPrice =Fun.GetUIText(className,"Entry_12")
    TreeView13 = Fun.GetUIEle(className,"TreeView_13")
    TreeView13 .insert('','end',values=(StockCode[0],StockName[0],StockTime[0],StockPrice[0],MinPrice,MaxPrice))
    StockArray = Fun.GetUIData(className,"TreeView_13","StockArray")
    StockArray.append([StockCode[0],MaxPrice,MinPrice])

           这个函数,主要就是将填写的股票信息显示到TreeView中以及放入它的绑定数组变量。这里需要import StockMonitor哦。

          用样方式为“启动监控”按钮编写代码,对StockMonitor中的类实例化,并调用StartMonitoring函数进行监控。

StockMonitorInst = None
def Button_6_onCommand(className,widgetName):
    global StockMonitorInst
    BtnText = Fun.GetUIText(className,widgetName)
    if BtnText == "启动监控":
        if StockMonitorInst == None:
            StockMonitorInst = StockMonitor.StockMonitor()
        StockArray = Fun.GetUIData(className,"TreeView_13","StockArray")
        for stockcode in StockArray:
            StockMonitorInst.addStock(stockcode[0],stockcode[1],stockcode[2])
        TreeView = Fun.GetUIEle(className,"TreeView_13")
        PhoneNumber=Fun.GetUIText(className,"Entry_17")
        StockMonitorInst.SetMonitorInfo(TreeView,PhoneNumber)       
        StockMonitorInst.StartMonitoring()    
        Fun.SetUIText(className,widgetName,"停止监控")
    else:
        StockMonitorInst.StopMonitoring()
        Fun.SetUIText(className,widgetName,"启动监控")

            如果不需要监控时,再次点击按钮即可。

你可能感兴趣的:(Python,TKinterDesigner)