7

用Tkinter打造自己的Python IDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器

 3 years ago
source link: https://blog.csdn.net/hepu8/article/details/122758311
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

用Tkinter打造自己的Python IDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器

同时被 3 个专栏收录
101 篇文章 38 订阅
94 篇文章 54 订阅
97 篇文章 9 订阅

用Tkinter打造自己的Python IDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器
前面我们介绍了在Tkinter中使用exec()函数运行用户程序的方法。exec()采用多线程方式运行用的Python代码,容易使编辑器程序崩溃。此外,如果用户也是开发Tkinter应用程序,会对用Tkinter开发的编辑器软件有影响。因此以前采用的外部运行Python代码模式。
我们设计了一个批处理文件[run_py.bat],文件内容如下。

@python.exe -i %1 %2  %3 %4

我们设计相应的外部运行按钮,主要代码如下。

    def runuc2(self):
        try:
            f = open('temppy.py','w',encoding='utf-8',errors='ignore')
            msg = self.textPad.get(1.0,tk.END)
            f.write(msg)
            f.close()
            runpy='run_py.bat temppy.py'
            os.system(runpy)
        except Exception as e:
            pass

上面介绍的以前的运行模式。
最近春节休假期间,利用空闲对HP_tk.py和HP_tk2.py模块进行了改进,设计出了几个新Tkinter控件。例如新控件允许用户代码以多进程方式运行用户程序。用户程序的bug不再影响编辑器程序的运行。
我们新设计的myide.py全部源代码如下,有详细注释。[运行模块]是多线程运行,[运行程序]是多进程运行。

# -*- coding: utf-8 -*-
import  tkinter  as  tk   #导入Tkinter
import  tkinter.ttk  as  ttk   #导入Tkinter.ttk
import HP_global as g   #建立全局数据域g
import  HP_tka  as  htk   #导入高级htk
from tkinter.messagebox import *
from tkinter.filedialog import *
import PIL
"""
#功能:Python小白代码编辑器
#版本:Ver1.00
#设计人:独狼荷蒲
#电话:18578755056
#QQ:2775205/2886002
#小白量化中文PythonTkinter群:983815766
#百度:荷蒲指标,小白量化
#开始设计日期: 2022-01-30
#最后修改日期:2022年1月30日
#主程序:myide.py
"""
mytitle='小白中文Python程序编辑器'
#建立主窗口
root=htk.MainWindow(title=mytitle,x=100,y=200,w=1200, h=700)
root.iconbitmap('ico/cp64.ico')  #设置应用程序图标
root.SetCenter()  #移动到屏幕中央
##获取窗口信息
screenwidth = root.winfo_screenwidth()  #获取屏幕宽度(单位:像素)
screenheight = root.winfo_screenheight()  #获取屏幕高度(单位:像素)
winw= root.winfo_width()   #获取窗口宽度(单位:像素)
winh = root.winfo_height()  #获取窗口高度(单位:像素)

#建立窗口菜单
mainmenu=htk.windowMenu(root) #建立窗口菜单,使用默认菜单

#建立窗口工具栏
toolsbar=htk.ToolsBar(root,5,bg='#1E488F') #创建工具栏
toolsbar.pack(side=tk.TOP, fill=tk.X)   #把工具栏放到窗口顶部
toolsbar.demo()  #工具栏改变图片演示

#分割窗口为左右两部分
#建立可分割区域paned
paned= tk.PanedWindow(root,orient=tk.HORIZONTAL,showhandle=True, \
                    sashrelief=tk.SUNKEN,sashwidth=1)  #默认是左右分布的
paned.pack(fill=tk.BOTH, expand=1) #放到主窗口,上下左右缩放

#选择目录
def selectdirectory():
    path_ = askdirectory()
    tree.clear()
    tree.load_path(path_ ) #为树控件加载指定的目录树


#树鼠标双击事件
def treeDoubleClick(event):
    #print(event)
    item = tree.tree.selection()[0]
    i2=tree.tree.parent(item)
    s2=""
    while i2!="":
        s2=tree.tree.item(i2, "text")+'\\'+s2
        i2=tree.tree.parent(i2)
    txt2=s2+tree.tree.item(item, "text")
    if txt2[-4:]=='.txt' or txt2[-3:]=='.py':
        ucode.loadfile(txt2)
        tabControl.tab(0, text=ucode.filename)

def setlabel():
    tabControl.tab(0, text=ucode.filename)

#左画面设计
ttabControl = ttk.Notebook(paned)          # Create Tab Control
ttab1 = ttk.Frame(ttabControl)            # Add a third tab
ttabControl.add(ttab1, text='工程目录')      # Make second tab visible
paned.add(ttabControl)
paned.paneconfig(ttabControl,width=200)

tree = htk.Tree(ttab1,width=200)
tree.load_path('./') #为树控件加载指定的目录树
tree.pack(expand = 1, fill = tk.BOTH)
tree.usepop=treeDoubleClick  #绑定双击事件

#在左右可调区域中创建,可上下调整区域paned2
paned2 = tk.PanedWindow(paned,orient=tk.VERTICAL, showhandle=True, sashrelief=tk.SUNKEN,width=int((winw-300)/2),sashwidth=1)
paned.add(paned2)

#tabControl = htk.ClosableNotebook(paned2)  #创建Notebook
tabControl = ttk.Notebook(paned2) 
tab = tk.Frame(tabControl,bd=0,background='black')
tabControl.add(tab, text='newfile.py')
#在选项卡中建立代码编辑器
ucode=htk.Codeedit(tab,fontsize=12,bg='black')   #代码编辑框
tabControl.pack(fill=tk.BOTH, expand=1)
ucode.setlabel=setlabel
paned2.add(tabControl)
paned2.paneconfig(tabControl,heigh=400)

#建立分割区域paned3
paned3 = tk.PanedWindow(paned2,orient=tk.VERTICAL, showhandle=True, sashrelief=tk.SUNKEN,width=int((winw-300)/2),bg='black',sashwidth=1)
paned2.add(paned3)

##为信息框设置一个容器
frame2=tk.LabelFrame(paned3,text='信息框',height=100)
frame2.pack(fill=tk.BOTH, expand=1)


umess=htk.PythonCMD(frame2,ipy="ipython",py="ipython ",fontsize=12,bg='#5a5a5a')
umess.pack(expand=1,fill=tk.BOTH)
paned3.paneconfig(frame2,heigh=200)

htk.ttmsg=umess.text  #绑定信息输出变量,
ucode.outmess=htk.ttmsg   #设置代码输出信息框
htk.ttmsg['fg']='white'    #输出框字体颜色
htk.ttmsg['insertbackground']='magenta'    #输出框光标颜色

##设置菜单功能的功能
mainmenu.set('文件','执行程序',command=ucode.runpy)
mainmenu.set('文件','新建',command=ucode.newfile)
mainmenu.set('文件','打开',command=ucode.openfile)
mainmenu.set('文件','运行',command=ucode.runuc)
mainmenu.set('文件','保存',command=ucode.savefile)
mainmenu.set('文件','另存为',command=ucode.saveas)
mainmenu.set('编辑','撤销',command=ucode.undo)
mainmenu.set('编辑','重做',command=ucode.redo)
mainmenu.set('编辑','剪切',command=ucode.cut)
mainmenu.set('编辑','复制',command=ucode.copy)
mainmenu.set('编辑','粘贴',command=ucode.paste)
mainmenu.set('编辑','全选',command=ucode.selectall2)
mainmenu.set('程序','运行',command=ucode.runuc)
mainmenu.set('程序','转中文',command=ucode.pyetoc)
mainmenu.set('程序','转英文',command=ucode.pyctoe)
mainmenu.set('帮助','项目缩略图',command=root.save)
mainmenu.set('项目','项目目录',command=selectdirectory)

#设置按钮的
toolsbar.config(0,command=ucode.newfile)
toolsbar.config(1,command=ucode.openfile)
toolsbar.config(2,command=ucode.savefile)
toolsbar.config(3,command=ucode.runuc)
toolsbar.config(4,command=root.callback_quit)

#创建状态栏
status=htk.StatusBar(root)    #建立状态栏
status.pack(side=tk.BOTTOM, fill=tk.X)  #把状态栏放到最底部
status.demo()  #工具栏演示

root.mainloop()      #进入Tkinter消息循环
newCodeMoreWhite.png

程序运行结果如下。
在CMD窗口中运行。

c:\xbpython>python  myide.py

出现图形如下。
在这里插入图片描述
我们装入一个股票分析程序[KDJ指标演示6.py],代码如下。

#K线图和指标演示
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import HP_tdx as htdx
from HP_formula import *
import HP_global as g  #小白量化全局变量库
import HP_plt as hplt   #小白量化指标绘图模块
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#白底色
g.ubg='w';g.ufg='b';g.utg='b';g.uvg='#1E90FF';

#连接行情主站
htdx.TdxInit(ip='40.73.76.10',port=7709)
code='600080'
#获取日线数据,800条数据
df = htdx.get_k_data(code,ktype='D',index=False,autype='qfq')
mydf=initmydf(df)  ##初始化mydf表

mydf['K'],mydf['D'],mydf['J']=KDJ(9,3,3)

mydf['S80']=80  #增加上轨80轨迹线
mydf['X20']=20  #增加下轨20轨迹线

#数据裁减
m=1
mydf=mydf.tail(150*m).head(150).copy()

#绘制图形
plt.figure(1,figsize=(10,8), dpi=80)

#绘制主图指标
ax1=plt.subplot(211)
hplt.ax_K(ax1,mydf,t=code,n=0)

#绘制副图指标
ax2=plt.subplot(212)

mydf=mydf.tail(100)  #显示最后100条数据线 
#下面是绘线语句
mydf.S80.plot.line()
mydf.X20.plot.line()
mydf.K.plot.line(legend=True)
mydf.D.plot.line(legend=True)
mydf.J.plot.line(legend=True)
plt.show()
newCodeMoreWhite.png

无论[运行模块],还是[运行程序]都能正确显示图形窗口。
在这里插入图片描述
随着以后的开发迭代,我相信这个编辑器模块会越来越完善。
下面是我们用这个代码编辑器开发的[小白量化中文Python研学实控系统 Vre 3.00],这将是我开发的可以学习,以及实际控制和量化实盘的系统。
我们运行下面中文Python代码,看看运行结果。

# -*- coding: utf-8 -*-
#通过while循环打印99乘法表通过while循环打印99乘法表
#用[运行]来执行
输出()
变量j = 1
条件循环 变量j <= 9:
    变量i = 1
    条件循环 变量i <= 变量j:
        输出('%d*%d=%d' % (变量i, 变量j, 变量i*变量j), end='\t')
        变量i += 1
    输出()
    变量j += 1
输出('输出')

在这里插入图片描述
支持交互式数输入出。
在这里插入图片描述
下面是Mt5实盘交易的演示图片。
在这里插入图片描述
好了,欢迎继续关注我的博客。
超越自己是我的每一步!我的进步就是你的进步!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK