我已经有一个10X10的正方形网格,我想在点击它时在网格中的正方形上绘制另一个正方形。
现在,我有一个在框架中绘制网格的功能,用于确定方形的坐标(左上角和右下角)。
我遇到问题的部分是
canvas=Canvas()
for row in range(10):
for column in range(10):
canvas.create_rectangle(10+(row*53),10+(column*53),60+(row*53),60+(column*53),fill='blue')
self.bind('<Button-1>',self.changeBlock)
其中
def changeBlock(self,event):
self.canvas.create_rectangle(upperX(event),upperY(event),lowerX(event),lowerY(event),fill='red')
upperX,upperY,lowerX,lowerY都是确定鼠标所在方格坐标的函数。
我不知道为什么当我点击画布上的东西时,changeBlock不会运行。
全:
class MainFrame(Frame):
def __init__(self,parent):
Frame.__init__(self,parent,background="blue")
self.parent=parent
self.parent.title("simple")
self.parent.geometry("600x600")
self.parent.resizable(0,0)
self.pack(fill=BOTH,expand=1)
canvas=Canvas()
for row in range(10):
for column in range(10):
canvas.create_rectangle(10+(row*53),10+(column*53),60+(row*53),60+(column*53),fill='blue')
self.bind('<Button-1>',self.changeClickBlock)
canvas.pack(fill=BOTH, expand=1)
答案 0 :(得分:1)
此代码有效,稍有修改。你没有提供相当足够的信息,但它足以看到事情......应该有效。我正在运行python3 - 在python2中,你从“Tkinter”导入。
重要问题:
什么是“自我” - 你定义了什么课?如果自己没有得到 某种tkinter小部件,然后绑定到它将不会有太大的好处。 bind会抛出异常吗?
你也没有保存对画布的引用,所以你怎么知道 self.canvas是后来的?相当令人困惑,但我认为你只是 没有发布整个代码。
可能的问题:
我的主要猜测是你没有绑定到画布,而是绑定到某个地方 其他。确保事件在您想要的小部件上触发。
我的第二个猜测是你忘了打包/网格/放置画布 tkinter toplevel。简单地制作它是不够的,你也需要 以某种方式将它添加到场景
from tkinter import *
root = Tk()
canvas=Canvas() # where did you save this? It's very important to keep it!
def changeBlock( event=None ):
# Here, I'm just making a rectangle of size 10. Make it as big as you want
# notice though that you're "self.canvas" will need to reference the
# the right thing
canvas.create_rectangle(event.x,event.y,event.x+10,event.y+10,fill='red')
for row in range(10):
for column in range(10):
canvas.create_rectangle(10+(row*53),10+(column*53),60+(row*53),60+(column*53),fill='blue')
# Here, I'm binding to the Canvas. Bind to the widget where the event occurs
canvas.bind('<Button-1>',changeBlock)
# make sure you add the widget somehow, or else it won't appear
canvas.grid()
root.mainloop()
其他建议
Effobt有一个关于tkinter的精彩教程。这是寻找基本示例的好地方
在画布上: http://effbot.org/tkinterbook/canvas.htm
关于事件: http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm