发布
社区首页 >问答首页 >用Tkinter点击绘图

用Tkinter点击绘图
EN

Stack Overflow用户
提问于 2014-12-08 04:49:33
回答 1查看 1.7K关注 0票数 1

我已经有了一个10×10的方格格,当它被点击时,我想在网格中的一个正方形上画另一个正方形。

现在,我有一些函数可以在一个框架中绘制网格,还有一些函数可以确定正方形(左上角和右下角)的坐标。

我遇到麻烦的地方是

代码语言:javascript
代码运行次数:0
复制
    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)    

哪里

代码语言:javascript
代码运行次数:0
复制
def changeBlock(self,event):
    self.canvas.create_rectangle(upperX(event),upperY(event),lowerX(event),lowerY(event),fill='red')

upperX、upperY、lowerX、lowerY都是用来确定鼠标所在的方块的坐标的函数。

当我点击画布上的东西时,我不知道为什么changeBlock不运行。

全部:

代码语言:javascript
代码运行次数:0
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-08 04:54:29

这段代码可以工作,只是稍微修改一下你的代码。您没有为提供足够的信息,但这足以说明.该起作用了。我正在运行python3 -在python2中,您可以从"Tkinter“导入。

重要问题

  • 什么是“自我”-你定义了什么类别?如果self没有派生出某种tkinter小部件,那么绑定到它不会有多大好处。bind会抛出异常吗? 您也没有保存对画布的引用,那么您如何知道self.canvas是什么呢?很让人困惑,但我想你只是没有发布全部代码。

可能问题

  • 我的主要猜测是你没有绑在画布上,而是在别的地方。确保事件在您希望它的小部件上触发。 我的第二个猜测是,你忘了把帆布打包/网格/放置在平底鞋里。简单地做它是不够的,你也需要将它添加到场景中。 从tkinter * root = Tk() canvas=Canvas() #您在哪里保存的?保留它是非常重要的!def changeBlock( event=None ):#在这里,我只是在做一个大小为10的矩形。请注意,尽管您是"self.canvas“,但是对于范围(10)中的列(10):canvas.create_rectangle(行*53),您的”self.canvas“将需要引用#正确的事物canvas.create_rectangle(Ev.x,Ev.y,event.x+10,event.y+10,fill='red')。10+(列*53),60+(行*53),60+(列*53),fill='blue') #在这里,我绑定到画布。绑定到事件发生的小部件-- canvas.bind('',changeBlock) #--确保您以某种方式添加了小部件,否则就不会出现canvas.grid() root.mainloop()

其他建议

Effobt在tkinter上有一个很好的教程。这是一个寻找基本例子的好地方

画布上的物品:http://effbot.org/tkinterbook/canvas.htm

关于事件:http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27351605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档