用Tkinter打造GUI开发工具(27)可视化设计及生成代码
Python有丰富的库,因此能使Tkinter的窗口用程序生成漂亮图形。我们对Tkinter库再次封装HP_tk模块,增加可很多新功能函数。HP_tk模块是小白量化平台的其中一个Tkinter增强模块,京东、淘宝、当当网上购买《零基础搭建量化投资系统——以Python为工具》正版书,赠送小白量化平台全部源代码。
这篇我们介绍正在打造的第二代增强模块HP_tk2,这个是针对商业化小白量化平台的模块,里面除了支持HP_tk的现有模块外,还封装了更高级的模块。例如带行号显示和彩色关键字、支持中文Python语法格式的代码编辑器useredit3模块,仿IPython的useredit2模块等等。
上图目前是雏形,很多功能没有完成。
此外还增加了可视化设计模块resizewidget模块。有了这些功能,学Python的朋友就有了搭建自己Python程序开发系统的能力,能够DIY自己的Visual Python系统。
我们下面做一个可视化设计GUI,并且完成生成独立运行代码的验证程序。这个程序使用了HP_tk2模块。
# Tkinter GUI可视化生成代码验证程序.
import tkinter as tk
import tkinter as ttk
import tkinter.tix as tix
from tkinter.constants import *
import HP_tk2 as htk
s1='''
import tkinter as tk
import tkinter as ttk
import tkinter.tix as tix
from tkinter.constants import *
root = tix.Tk() #主窗口root
root.title("可视化设计结果")
'''
s2='''
root.mainloop()
'''
if __name__ == '__main__':
root = tix.Tk() #主窗口root
root.title("可视化设计")
f0=tk.Toplevel(root) #可视化子窗
f0.title('弹出窗口') #Tkinter中设置窗口标题方法
top=htk.resizewidget(f0,800,600) #建立可调部件区域
f=tk.Button(top) #创建一个部件
f.place(x=30, y=150, width=190, height=100)
top.setwidget(f) #加入可调部件
l=tk.Label(top,text='Label')
l.place(x=130, y=150, width=120, height=30)
top.setwidget(l) #加入可调部件
def btn_cmd():
print('窗口坐标(%d,%d)'%(f0.winfo_x(),f0.winfo_y()))
print('窗口宽高(%d,%d)'%(f0.winfo_width() ,f0.winfo_height()))
print('\n部件1坐标')
x,y,width,height=top.readplace(top.win[0])
print('组件坐标:',x,y)
print('组件宽高:',width ,height)
print('\n部件2坐标')
x,y,width,height=top.readplace(top.win[1])
print('组件坐标:',x,y)
print('组件宽高:',width ,height)
s=s1+'\n'
ss="root.geometry(\'{}x{}+{}+{}\'.format(%d,%d, %d, %d)) #改变窗口位置和大小"%(f0.winfo_width(),\
f0.winfo_height(),f0.winfo_x(),f0.winfo_y())
s=s+ss+'\n'
for i in range(top.m):
x,y,width,height=top.readplace(top.win[i])
w=top.readwidget(top.win[i])
if w=='Label':
ss='f%d=tk.%s(root,text=\'label%d\')'%(i,w,i)
else:
ss='f%d=tk.%s(root)'%(i,w)
s=s+ss+'\n'
ss='f%d.place(x='%i
ss=ss+x+',y='+y+',width='+width+' ,height='+height+')'
s=s+ss+'\n'
s=s+s2
print('\n生成代码:\n')
print(s)
btn=tk.Button(root,text='生成代码',command=btn_cmd)
btn.place(x=10,y=10)
root.mainloop()
程序运行结果如下图。
我们调整窗口大小以及上面控件的位置,如下图。
点击按钮[生成代码],生成如下的代码。
import tkinter as tk
import tkinter as ttk
import tkinter.tix as tix
from tkinter.constants import *
root = tix.Tk() #主窗口root
root.title("可视化设计结果")
root.geometry('{}x{}+{}+{}'.format(395,122, 475, 886)) #改变窗口位置和大小
f0=tk.Button(root)
f0.place(x=7,y=8,width=190 ,height=100)
f1=tk.Label(root,text='label1')
f1.place(x=221,y=42,width=141 ,height=31)
root.mainloop()
这段代码运行结果如下图。
这个图形是不是跟我们上面设计的一致呢?
最近休假在家有时间,我打算再写一本书Tkinter高级教程,暂定书名《Python Tkinter可视化开发技术》,HP_tk2库将随这本书为大家提供。
对于不熟悉Python、Tkinter、Ttk、Tix技术的朋友,可在京东和淘宝上购买正版书《零基础搭建量化投资系统——以Python为工具》。这本书书的“第8章 视窗程序开发模块Tkinter”,介绍了入门知识,看懂后,可以通过百度搜索来学习更多Tkinter知识。
《零基础搭建量化投资系统——以Python为工具》
第8章 视窗程序开发模块Tkinter
8.1 Tkinter的使用
8.2 小部件的标准属性
8.2.1 Tkinter控件的属性
8.2.2 Tkinter控件属性的值和单位
1. 维度单位
2. 坐标系统
3. 颜色
4. 字体类型
5. 对齐方式
6. 浮雕风格
7. 位图
8. 鼠标样式
9. 图片
8.3 Tkinter主窗口
8.4 Toplevel顶层子窗口
8.5 创建窗口菜单
8.6 创建弹出菜单
8.7 控件的几何布局管理方法
1. 控件的pack布局
2. 控件的grid布局
3. 控件的place布局
8.8 Tkinter常用控件
1. Label控件
2. Frame控件
3. Button控件
4. Entry控件
5. 工具条和状态栏
6. Text控件
7. Scrollbar控件
8. Canvas控件
8.9 Tkinter的事件
1. 事件名称
2. 事件类型
3. 事件修饰符
4. 编写事件处理程序
8.10 Tkinter的主题控件Ttk
1. ttk.Notebook控件
2. ttk.Treeview控件
8.11 Tkinter的扩展控件Tix
1. 使用Tix
2. 表格几何管理器Form
3. tix.Balloon气球窗口小部件
4. tix.ButtonBox按钮框
5. tix.ComboBox组合框控件
6. tix.Control控制窗口
如遇不明白的Tkinter问题,可以在读者群中咨询作者。