在做一个小项目,程序运行后可以用鼠标自由选择图像上的区域,生成数据到二进制文件,然后再由其它程序读取这个二进制文件生成一个网页文件,网页文件里的图像就会自动有热点链接了。当然,这个程序需要sprites模块支持,需要测试的同学请用pip install sprites安装好Python精灵模块后,再复制代码去测试研究。别忘了按照程序里说的准备好一张宽度886,高度660的叫a.png的图片。以下是测试版的代码:
""" 图像热点链接可视化编辑器.py """ import pickle from sprites import * def draw_rect(rectangle): x1,y1,x2,y2 = rectangle screen.cv.create_rectangle(x1,-y1,x2,-y2) def savedata(): """把miaolinks存入文件中""" f = open('hot.dat',mode='wb') pickle.dump(miaolinks,f) f.close() showinfo('提示','miaolinks数据存入hot.dat成功!') screen_width,screen_height = 900,700 screen = Screen() screen.setup(900,700) screen.bgpic('a.png') screen.addpopup() # 以下代码修改索引为0的菜单项目 screen.popup. entryconfig(0, label='保存入hot.dat文件:',command=savedata) imgwidth,imgheight = 886,660 # 图像宽度与高度 w_gap = screen_width/2 - imgwidth/2 # 图像左上角到左边缘的水平间隙 h_gap = screen_height/2 - imgheight/2 # 图像左上角到上边缘的垂直间隙 d = Sprite(visible=False) if os.path.isfile('hot.dat'): # 如果存在hot.dat则读取内容 f = open('hot.dat',mode='rb') miaolinks = pickle.load(f) # 加载所有曾经存储的描点,是一个字典 f.close() else: miaolinks = {} # 否则新建这个字典,它是url和热点区域的映射,如 {'www.scratch8.net':[(x1,y1,x2,y2),(a,-b,c,-d)]} for link in miaolinks: r = miaolinks[link] draw_rect(r[-1]) leftkey = Mouse() # 鼠标左键 click = 0 item = None stack = [] while True: if leftkey.down() and click==0: x1,y1 = mouse_pos() # 记录第一个点 y1 = -y1 click = 1 if leftkey.down(): x2,y2 = mouse_pos() y2 = -y2 if item!=None:screen.cv.delete(item) item = screen.cv.create_rectangle(x1,y1,x2,y2) if leftkey.downup(): click=0 if abs(x1-x2)<5 or abs(y1-y2)<5:continue item = screen.cv.create_rectangle(x1,y1,x2,y2) ## x1,y1,x2,y2 = x1+screen_width/2,y1+screen_height/2,x2+screen_width/2,y2+screen_height/2 # 转换为相对于左上角为原点的坐标 ## x1,y1,x2,y2 = x1 - w_gap,y1 - h_gap,x2 - w_gap,y2 - h_gap ## print(x1,y1,x2,y2) a,b,c,d = x1,y1,x2,y2 # 原先的保存下 x1 = x1 + imgwidth/2 y1 = y1 + imgheight/2 x2 = x2 + imgwidth/2 y2 = y2 + imgheight/2 url = screen.textinput('网址','请输入网址:') if url: print(url,':',x1,y1,x2,y2) # x1,y1,x2,y2是在网页图像上的rect矩形区域,而a,-b,c,-d则是在本程序屏幕上为create_rectange画矩形准备的参数 miaolinks[url] = [(x1,y1,x2,y2),(a,-b,c,-d)] # 会覆盖以前的键值对 screen.update()