python鼠标画点连线_上点击鼠标绘制矩形[Python的](Draw rectangle on mouse click [

解决“全球名‘X1’没有定义”的问题

调试时一个好的经验法则是假设错误消息说的是实话。 在这种情况下,它是说,没有名为“X1”的全局变量。 所以,问自己“为什么?”。 无论你是不是创造一个“X1”变量在所有的,或者你以这样的方式创造它,它不是全球性的。

在你的情况,当你定义X1,Y1,X2和Y2,你正在创建它们作为局部变量。 这是创建变量时,Python的默认行为。 最简单的办法是将它们申报为全球:

def xaxis(event):

global x1, y1

x1, y1 = (event.x - 1), (event.y - 1)

def yaxis(event):

global x2, y2

x2, y2 = (event.x + 1), (event.y + 1)

一个不相关的第二个问题

你有你如何做你的绑定在你的代码的另一个问题。 考虑下面的代码片段:

w.bind("", yaxis)

w.bind("", create)

你是不是创建两个绑定,要创建一个,然后用另一个覆盖它。 你不需要两个绑定,但是。 您可以在创建函数中调用你y轴的功能。

使用面向对象的方法

然而,全局变量通常不是一个问题的最佳解决方案。 如果您切换到使用面向对象的方法,那么你可以将坐标存储为一个对象的属性。 下面是一个完整,工作示例:

import Tkinter as tk

class ExampleApp(tk.Tk):

def __init__(self):

tk.Tk.__init__(self)

self.x = self.y = 0

self.canvas = tk.Canvas(self, width=400, height=400, cursor="cross")

self.canvas.pack(side="top", fill="both", expand=True)

self.canvas.bind("", self.on_button_press)

self.canvas.bind("", self.on_button_release)

def on_button_press(self, event):

self.x = event.x

self.y = event.y

def on_button_release(self, event):

x0,y0 = (self.x, self.y)

x1,y1 = (event.x, event.y)

self.canvas.create_rectangle(x0,y0,x1,y1, fill="black")

if __name__ == "__main__":

app = ExampleApp()

app.mainloop()

作为绘制拖动鼠标

如果你想为你拖动光标以绘制矩形,你可以改变程序来创建按钮按矩形。 如果你要么给对象的唯一标签或保存画布ID ,您可以设置鼠标移动事件来调整使用当前矩形的坐标COORDS画布对象的方法。 我会离开,作为一个练习留给读者,因为它不直接关系到被问的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值