tkinter画布在框架

我创建了一个拖放程序,可以很好地处理一个小的美学问题。它通过选择列表框中的项目,将其转换为canvas.create_text,然后将其放到画布上。唯一的问题是,create_text在列表框下,我想知道如何使它出现在列表框的顶部。我试着改变初始化的顺序,看着提高/降低,但我没有看到任何改变。tkinter画布在框架

def body(self, master): 

self.list = Listbox(master, width=26, height=10)

self.list.grid(row=0, column=1)

self.canvas = Canvas(master, width=350, height=500)

self.canvas.grid(row=0, column=0)

for j in self.items:

self.list.insert(END, j)

self.list.bind("<ButtonPress-1>", self.onPress)

self.list.bind("<ButtonRelease-1>", self.onRelease)

self.list.bind("<B1-Motion>", self.onMotion)

def onPress(self, event):

'''Being drag of an object'''

# record the item and its location

w = event.widget

index = w.nearest(event.y)

name = self.list.get(index)

t = self.canvas.create_text(event.x+350, event.y+90, text=name.replace(' ', '\n'),justify=CENTER, tags='sweden')

self.dragData["item"] = t

self.dragData["x"] = event.x

self.dragData["y"] = event.y

self.list.delete(index)

def onMotion(self, event):

'''Handle dragging of an object'''

# compute how much this object has moved

deltaX = event.x - self.dragData["x"]

deltaY = event.y - self.dragData["y"]

# move the object the appropriate amount

self.canvas.move(self.dragData["item"], deltaX, deltaY)

# record the new position

self.dragData["x"] = event.x

self.dragData["y"] = event.y

def onRelease(self, event):

'''End drag of an object'''

# reset the drag information

wx, wy = self.canvas.winfo_rootx(), self.canvas.winfo_rooty()

x,y = self.winfo_pointerxy()

cx = self.canvas.canvasx(x-wx)

cy = self.canvas.canvasy(y-wy)

#Rest of the release code

回答:

不,您不能在画布上创建文字,但会将其显示在某个其他窗口的上方。通常,对于拖放操作,您需要创建一个顶层窗口,并将overrideredirect标志设置为充当被拖动对象的代理。

以上是 tkinter画布在框架 的全部内容, 来源链接: utcz.com/qa/266917.html

回到顶部