| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
大家好。 
 
我现在想在画布(Canvas)上创建一个图案 
(不一定是Canvas,别的也可以) 
 
我的要求是这个图案能被选中,针对这个选中的图案,可以弹出右键menu等等 
可以针对选中的图案,做进一步的操作 
 
但是我用Canvas的话,只能画出图案,没有办法选中。 
 
不知道大家有没有什么好的建议? 
 
谢谢大家了 
 
 
我现在简单的代码如下: 
 
- #!/usr/bin/python3
 
  
- import tkinter as tk
 
  
- from tkinter import ttk
 
  
- root = tk.Tk()
 
  
- cv = tk.Canvas(root)
 
  
- cv.create_rectangle(10,10,110,110)
 
  
- cv.create_text(60,60, text='block 1')
 
  
- cv.pack()
 
  
- root.mainloop()
 
  复制代码 
你这问题竟然让我折腾一晚上,Canvas和Menu都没用过,查了N多个网页,才搞定。。   
- from tkinter import *
 
 - from tkinter import ttk
 
 - from tkinter import messagebox
 
 - import random
 
  
- root = Tk()
 
 - root.geometry("500x300")
 
  
- cv = Canvas(root, bg='white')
 
 - cv.pack()
 
 - cv.create_text(280, 200, text="左键单击矩形 \n或右键选择 可随机改变颜色")
 
  
- def oval_act(ev):
 
 -     messagebox.showinfo(root, "你点击了矩形!")
 
  
- def rect_act():
 
 -     colors = ['red', 'blue', 'green', 'black', 'white', 'grey']
 
 -     cv.itemconfig("my_rect", fill=random.choice(colors))
 
  
- def right_click(ev):
 
 -     try:
 
 -         m.tk_popup(ev.x_root, ev.y_root)
 
 -     finally:
 
 -         m.grab_release()
 
  
- # 右键菜单内容(模拟)
 
 - m = Menu(root, tearoff = 0)
 
 - m.add_command(label = "随机改变颜色", command=rect_act)
 
 - m.add_command(label ="Cut")
 
 - m.add_command(label ="Copy")
 
 - m.add_separator()
 
 - m.add_command(label ="Rename")
 
  
- oval = cv.create_oval(100, 100, 200, 180, fill='yellow') # 要带fill=..参数,点击动作才行!!
 
 - cv.tag_bind(oval, '<Button-1>', oval_act)
 
  
- cv.create_rectangle(200, 100, 300, 150, fill='blue', tags="my_rect")
 
 - cv.tag_bind("my_rect", "<Button-1>", lambda ev: rect_act())  # 左键单击改变颜色(注意这里的写法,否则传参报错!)
 
 - cv.tag_bind("my_rect", "<Button-3>", right_click)  # 右键弹出菜单
 
  
- root.mainloop()
 
  
 
- # 参考:
 
 - # 官方文档 https://tkdocs.com/tutorial/canvas.html
 
 - # https://pythonguides.com/python-tkinter-canvas/ 基本例子
 
 - # http://sandbox.mc.edu/~bennet/python/code/canv_py.html 好例子!(模块需部分修改)
 
 - ……
 
 - 。。? 不能放链接?什么不良信息?。。
 
 
  复制代码 
其他,看你自己了,我歇了~    
 
 
 |   
 
 
 
 |