关键词:
用Tkinter打造自己的Python IDE开发工具(2)实现Python代码执行并输出信息
上一篇我们介绍了编辑器的实现。这篇介绍实现Python代码执行并输出信息。
执行Python代码,我们使用函数exec()。其用法如下。
exec(object[, globals[, locals]])
具体使用,我们见后面的代码,有详细注释,如果不清楚可以来我的QQ群咨询。
我们创建一个输出信息窗。
为了美观,我们使用了LabelFrame容器控件。
在这个控件中再放置一个ScrolledText控件,作为输出信息框textMess。
再增加2个按钮,【执行程序】【清空信息窗】。
整个界面就设计完成了,见下图。
首先我们想把程序输出信息输出到信息窗口中。我们目前不能直接用print()语句进行输出,也不能用input()语句进行输入。以后再教如何实现。
如果你想了解怎么接管或截取print()和input()语句,可以参考我开发的模块HP_tk.py中的源代码。
class console就是接管print()和input()语句。
购买<零基础搭建量化投资系统――以Python为工具>正版书,加读者群下载源代码。在xb2g.zig压缩包中。
京东购买网址
https://item.jd.com/61567375505.html
天猫购买网址
https://detail.tmall.com/item.htm?id=607469269858
我们这里先仿print()语句,输出到信息框。
我们设计了2个输出函数,文本输出函数myprint()和输出彩色信息函数colorprint()。实现代码如下。
#用户输出信息
def myprint(txt):
global textMess
if textMess != None :
textMess.insert(tk.END, txt)
textMess.see(tk.END)
#输出彩色信息
def colorprint(txt,color='black'):
global textMess
if textMess != None :
if color!='black':
textMess.tag_config(color, foreground=color)
textMess.insert(tk.END, txt,color)
textMess.see(tk.END)
最后再实现【执行程序】【清空信息窗】这2个按钮的操作。
##清空信息窗
def clearMess():
global textMess
textMess.delete(1.0,tk.END)
#运行用户程序
def runpy():
global textPad,textMess
try:
msg = textPad.get(1.0,tk.END)
mg=globals()
ml=locals()
exec(msg,mg,ml)
except Exception as e:
colorprint('\\n#用户代码出错:'+str(e)+'\\n','red')
下面我们给出完成程序代码myide001.py。
# -*- coding: utf-8 -*-
"""
#功能:Python小白代码编辑器
#版本:Ver1.00
#设计人:独狼荷蒲
#电话:18578755056
#QQ:2775205/2886002
#小白量化中文PythonTkinter群:983815766
#百度:荷蒲指标,小白量化
#开始设计日期: 2022-01-21
#使用者请同意最后<版权声明>
#最后修改日期:2022年1月25日
#主程序:myide.py
"""
import tkinter as tk #导入Tkinter
import tkinter.ttk as ttk #导入Tkinter.ttk
from tkinter.scrolledtext import ScrolledText #导入ScrolledText
from tkinter.filedialog import *
mytitle='小白Python编辑器'
#建立主窗口
root=tk.Tk()
root.title(mytitle)
root.geometry('x++'.format(800, 600, 100, 100))
#放几个按钮
frame=tk.Frame(root)
button1=tk.Button(frame,text='新文件')
button2=tk.Button(frame,text='读取文件')
button3=tk.Button(frame,text='另存文件')
button4=tk.Button(frame,text='执行程序')
button5=tk.Button(frame,text='清空信息窗')
button1.pack(side=tk.LEFT)
button2.pack(side=tk.LEFT)
button3.pack(side=tk.LEFT)
button4.pack(side=tk.LEFT)
button5.pack(side=tk.RIGHT)
frame.pack(side=tk.TOP,fill=tk.BOTH)
#放置一个文本框
global textPad
textPad= ScrolledText(bg='white')
textPad.pack(fill=tk.BOTH, expand=1)
textPad.focus_set()
global filename
filename='newfile.py'
#实现按钮功能
def btnfunc01(): #新文件
global textPad,filename
textPad.delete(1.0,tk.END)
filename='newfile.py'
def btnfunc02(): #读取文件
global textPad,filename
filename2 = askopenfilename(defaultextension='.py')
if filename2 != '':
textPad.delete(1.0,tk.END)#delete all
f = open(filename2,'r',encoding='utf-8',errors='ignore')
textPad.insert(1.0,f.read())
f.close()
filename=filename2
def btnfunc03(): #另存文件
global textPad,filename
filename = asksaveasfilename(initialfile = filename,defaultextension ='.py')
if filename != '':
fh = open(filename,'w',encoding='utf-8',errors='ignore')
msg = textPad.get(1.0,tk.END)
fh.write(msg)
fh.close()
#为按钮设置功能
button1['command']=lambda:btnfunc01()
button2['command']=lambda:btnfunc02()
button3['command']=lambda:btnfunc03()
##为信息框设置一个容器
frame2=tk.LabelFrame(root,text='信息框',height=100)
frame2.pack(fill=tk.BOTH, expand=1)
global textMess
#放置一个文本框作为信息输出窗口
textMess= ScrolledText(frame2,bg='white', height=10)
textMess.pack(fill=tk.BOTH, expand=1)
##清空信息窗
def clearMess():
global textMess
textMess.delete(1.0,tk.END)
#用户输出信息
def myprint(txt):
global textMess
if textMess != None :
textMess.insert(tk.END, txt)
textMess.see(tk.END)
#输出彩色信息
def colorprint(txt,color='black'):
global textMess
if textMess != None :
if color!='black':
textMess.tag_config(color, foreground=color)
textMess.insert(tk.END, txt,color)
textMess.see(tk.END)
#运行用户程序
def runpy():
global textPad,textMess
try:
msg = textPad.get(1.0,tk.END)
mg=globals()
ml=locals()
exec(msg,mg,ml)
except Exception as e:
colorprint('\\n#用户代码出错:'+str(e)+'\\n','red')
button4['command']=lambda:runpy()
button5['command']=lambda:clearMess()
root.mainloop() #进入Tkinter消息循环
这个程序的运行结果见上图。
我建议读者将这个编辑器改名为自己喜欢的编辑器的名字。
mytitle='小白Python编辑器'
修改这里就可以了。
我们在这个编辑器中,编写并执行自己开发的代码。
我们用Python设计一个杨辉三角程序,这个程序只能在我们开发的IDE中运行,完成程序代码如下:
#杨辉三角
def triangles():
N=[1] #初始化为[1],杨辉三角的每一行为一个list
while True:
yield N #yield 实现记录功能,没有下一个next将跳出循环,
S=N[:] #将list N赋给S,通过S计算每一行
S.append(0) #将list添加0,作为最后一个元素,长度增加1
N=[S[i-1]+S[i] for i in range(len(S))] #通过S来计算得出N
colorprint('杨辉三角\\n','blue')
n = 0
results = []
for t in triangles():
myprint(t)
myprint('\\n') #换行
results.append(t)
n = n + 1
if n == 10:
break
colorprint('超越自己,是我的每一步,我的进步就是你的进步。','red')
colorprint(' 小白量化中文PythonTkinter群:983815766 \\n','blue')
程序运行结果见下图。
也许一些读者说这个IDE太简单了,我们这里是通过设计IDE引导大家学习Python的兴趣,并逐步成为Python大牛。
设计下面的IDE也很容易。
好了,欢迎继续关注我的博客。
超越自己是我的每一步!我的进步就是你的进步!
用tkinter打造自己的pythonide开发工具变量数据共享机制及小白量化策略编写(代码片段)
用Tkinter打造自己的PythonIDE开发工具(7)变量数据共享机制及小白量化策略编写首先我设计的HP_开头的系列Python模块及源文件目前不开源,所有源文件只对读者自己使用学习,不得放到网上公开,所有HP_开头的源代码已经申请... 查看详情
用tkinter打造自己的pythonide开发工具python多文件共享变量与智能插件设计(代码片段)
用Tkinter打造自己的PythonIDE开发工具(6)Python多文件共享变量与智能插件设计在Python中实现多个文件共享变量,即又可以获取变量值,也可以修改变量的值。有两种方式。一是作用域共享变量,一是类属性共享... 查看详情
用tkinter打造自己的pythonide开发工具利用hp_tk模块设计自己的代码编辑器(代码片段)
用Tkinter打造自己的PythonIDE开发工具(4)利用HP_tk模块设计自己的代码编辑器HP_tk.py模块是小白量化第二代量化系统中的开发模块。其中HP_tk.py模块是小白量化系统GUI的开发库,上一篇介绍的Tree控件使用了HP_tk.py模块中... 查看详情
用tkinter打造自己的pythonide开发工具可调整分割布局文件夹和文件名选择及目录树(代码片段)
用Tkinter打造自己的PythonIDE开发工具(3)可调整分割布局、文件夹和文件名选择及目录树这一篇重点介绍可调整分割布局。建立可分割区域需要用控件tk.PanedWindow。使用方法见下面代码。其中我们Tree控件使用了HP_tk.py模块... 查看详情
用tkinter打造自己的pythonide开发工具利用hp_tka模块设计自己的中文代码编辑器(代码片段)
用Tkinter打造自己的PythonIDE开发工具(5)利用HP_tka模块设计自己的中文代码编辑器前面我们介绍了在Tkinter中使用exec()函数运行用户程序的方法。exec()采用多线程方式运行用的Python代码,容易使编辑器程序崩溃。此外... 查看详情
用tkinter打造自己的pythonide开发工具利用hp_tk模块设计自己的代码编辑器(代码片段)
用Tkinter打造自己的PythonIDE开发工具(4)利用HP_tk模块设计自己的代码编辑器HP_tk.py模块是小白量化第二代量化系统中的开发模块。其中HP_tk.py模块是小白量化系统GUI的开发库,上一篇介绍的Tree控件使用了HP_tk.py模块中... 查看详情
用tkinter打造自己的pythonide开发工具变量数据共享机制及小白量化策略编写(代码片段)
用Tkinter打造自己的PythonIDE开发工具(7)变量数据共享机制及小白量化策略编写首先我设计的HP_开头的系列Python模块及源文件目前不开源,所有源文件只对读者自己使用学习,不得放到网上公开,所有HP_开头的源代码已经申请... 查看详情
用tkinter打造自己的pythonide开发工具变量数据共享机制及小白量化策略编写(代码片段)
用Tkinter打造自己的PythonIDE开发工具(7)变量数据共享机制及小白量化策略编写首先我设计的HP_开头的系列Python模块及源文件目前不开源,所有源文件只对读者自己使用学习,不得放到网上公开,所有HP_开头的源代码已经申请... 查看详情
用tkinter打造自己的pythonide开发工具可调整分割布局文件夹和文件名选择及目录树(代码片段)
用Tkinter打造自己的PythonIDE开发工具(3)可调整分割布局、文件夹和文件名选择及目录树这一篇重点介绍可调整分割布局。建立可分割区域需要用控件tk.PanedWindow。使用方法见下面代码。其中我们Tree控件使用了HP_tk.py模块... 查看详情
用tkinter打造自己的pythonide开发工具可调整分割布局文件夹和文件名选择及目录树(代码片段)
用Tkinter打造自己的PythonIDE开发工具(3)可调整分割布局、文件夹和文件名选择及目录树这一篇重点介绍可调整分割布局。建立可分割区域需要用控件tk.PanedWindow。使用方法见下面代码。其中我们Tree控件使用了HP_tk.py模块... 查看详情
用tkinter打造自己的pythonide开发工具python多文件共享变量与智能插件设计(代码片段)
用Tkinter打造自己的PythonIDE开发工具(6)Python多文件共享变量与智能插件设计在Python中实现多个文件共享变量,即又可以获取变量值,也可以修改变量的值。有两种方式。一是作用域共享变量,一是类属性共享... 查看详情
pythonide(集成开发环境)
本文为大家推荐几款款不错的PythonIDE(集成开发环境),比较推荐PyCharm,当然你可以根据自己的喜好来选择适合自己的PythonIDE。 PyCharmPyCharm是由JetBrains打造的一款PythonIDE。PyCharm具备一般PythonIDE的功能... 查看详情
python集成开发工具推荐
首先PythonIDE集成开发工具有很多,可以根据自己的情况来选择。 PyCharmPyCharm是由JetBrains打造的一款PythonIDE。PyCharm官方下载地址:http://www.jetbrains.com/pycharm/download/ SublinmeText是一款可运行在Linux,Windows和MacOSX,也是许多程序... 查看详情
用tkinter打造gui开发工具(49)在tkinter窗口上动态显示matplotlib.pyplot图形(代码片段)
用Tkinter打造GUI开发工具(49)在Tkinter窗口上动态显示matplotlib.pyplot图形因为要在Tkinter窗口上动态显示matplotlib.pyplot图形,我首先采用了最先能想到的Tkinter的布局方法。画图,显示到Tkinter窗口,删除掉绘图,重... 查看详情
pythonide(集成开发环境)
本文为大家推荐几款款不错的PythonIDE(集成开发环境),比较推荐PyCharm,当然你可以根据自己的喜好来选择适合自己的PythonIDE。 PyCharmPyCharm是由JetBrains打造的一款PythonIDE。PyCharm具备一般PythonIDE的功能... 查看详情
两个命令把vim打造为pythonide
curl-Ohttps://raw.githubusercontent.com/vince67/v7_config/master/vim.shbashvim.sh 查看详情
python怎么用tkinter
参考技术ATkinter是使用python进行窗口视窗设计的模块。Tkinter模块("Tk接口")是Python的标准TkGUI工具包的接口。作为 python特定的GUI界面,是一个图像的窗口,tkinter是python自带的,可以编辑的GUI界面,我们可以用GUI实现很... 查看详情
学习python,开发工具我们应该如何选择
...honny是基于python内置图形库tkinter开发出来的支持多平台的pythonIDE,支持语法着色、代码自动补全、debug等功能,如果你正在寻找一种“轻量级”的pythonIDE,那么可以试一试Thonny。五、V 查看详情