Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter-如何返回小部件_Python_Tkinter_Widget - Fatal编程技术网

Python Tkinter-如何返回小部件

Python Tkinter-如何返回小部件,python,tkinter,widget,Python,Tkinter,Widget,我的目标是编写一个程序,插入一个对象(例如一个矩形) 插入后可以使用箭头键移动的 我可以在画布上放置一个矩形,但无法与 矩形,因为我无法从事件函数返回小部件 因此,在这个程序中,我可以移动画布上已经存在的矩形, 但是当我插入另一个矩形时,我仍然在移动第一个矩形 from tkinter import * root = Tk() my_canvas = Canvas(root, width = 500, height = 500, bg = "white") my_canv

我的目标是编写一个程序,插入一个对象(例如一个矩形)
插入后可以使用箭头键移动的
我可以在画布上放置一个矩形,但无法与
矩形,因为我无法从事件函数返回小部件

因此,在这个程序中,我可以移动画布上已经存在的矩形,
但是当我插入另一个矩形时,我仍然在移动第一个矩形

from tkinter import *

root = Tk()

my_canvas = Canvas(root, width = 500, height = 500, bg = "white")
my_canvas.grid(row = 0, column = 0)

my_object = my_canvas.create_rectangle(50, 150, 250, 50, fill = "red")


def left(event):
  my_canvas.move(my_object, -10, 0)
  
def right(event):
  my_canvas.move(my_object, 10, 0)
  
def up(event):
  my_canvas.move(my_object, 0, -10)
  
def down(event):
  my_canvas.move(my_object, 0, 10)
  
def opamp(event):
  #the following code does not overwrite my_object...
  my_object = my_canvas.create_rectangle(100, 200, 250, 50, fill = "black")
  my_label = Label(root, text = "your mouse is at " + str(event.x) + " " + str(event.y))
  my_label.grid(row = 1, column = 1)
  #returning my_object does not work either

root.bind("<Left>", left)
root.bind("<Right>", right)
root.bind("<Up>", up)
root.bind("<Down>", down)
root.bind("<o>", opamp)


root.mainloop()
从tkinter导入*
root=Tk()
我的画布=画布(根,宽度=500,高度=500,bg=“白色”)
my_canvas.grid(行=0,列=0)
my_object=my_canvas.创建_矩形(5015025050,fill=“red”)
def left(事件):
my_canvas.move(my_对象,-10,0)
def权限(事件):
my_canvas.move(my_对象,10,0)
def up(事件):
my_canvas.move(my_对象,0,-10)
def关闭(事件):
my_canvas.move(my_对象,0,10)
def opamp(事件):
#以下代码不会覆盖我的\u对象。。。
我的对象=我的画布。创建矩形(10020025050,fill=“black”)
my_label=label(root,text=”您的鼠标位于“+str(event.x)+”“+str(event.y))
my_label.grid(行=1,列=1)
#返回我的_对象也不起作用
root.bind(“,左)
root.bind(“,右)
root.bind(“,up)
root.bind(“,向下)
root.bind(“,opamp)
root.mainloop()

您可以使用
标记
而不是
返回的项目ID。在移动函数中创建矩形()

从tkinter导入*
ACTIVE=“ACTIVE”#用于*活动*项目的标记名称
root=Tk()
我的画布=画布(根,宽度=500,高度=500,bg=“白色”)
my_canvas.grid(行=0,列=0)
我的画布。创建矩形(50、150、250、50,fill=“red”,tag=ACTIVE)#使其成为ACTIVE*
def left(事件):
我的画布移动(活动,-10,0)
def权限(事件):
我的画布移动(活动,10,0)
def up(事件):
我的画布移动(活动,0,-10)
def关闭(事件):
我的画布移动(活动,0,10)
def opamp(事件):
my_canvas.dtag(活动,活动)#清除当前活动标记
我的画布。创建矩形(100、200、250、50,fill=“black”,tag=ACTIVE)#使其处于活动状态*
#my_label=label(root,text=f“您的鼠标位于{event.x}{event.y}”)
#my_label.grid(行=1,列=0)
root.bind(“,左)
root.bind(“,右)
root.bind(“,up)
root.bind(“,向下)
root.bind(“,opamp)
root.mainloop()

您对术语的使用有点混乱。画布上的矩形不是小部件。您是要返回矩形的id,还是要返回小部件?@Bryan Oakley噢,对不起。我想与矩形交互。也许身份证能帮上忙。创建的矩形不是对象的实例吗?