我有一個帶有許多子標簽的標簽,我希望它是可拖動的,這樣用戶就可以在父標簽空間(大小x y)中任意拖動它。 我找到了tkinterDnD,但當我嘗試用pip3安裝python3的thinterDnD時,卻回傳了一個錯誤,說沒有找到它的版本。 希望得到任何幫助
。uj5u.com熱心網友回復:
我建議你使用widget.bind("<B1-Motion>", function)并在函式中使用widget.config(width=)。這些都是內置的函式,不需要新的模塊。你也可以使用widget.pack_forget()與widget.pack(pady=, padx=)。
uj5u.com熱心網友回復:
你可以使用place將一個標簽放在另一個標簽的特定坐標內。為了支持拖動一個專案,你只需要在一個按鈕上系結點擊和按鈕運動來調整坐標。
下面是一種方法。這個例子使用一個標簽作為容器,但是你可以使用任何你想要的部件,因為tkinter允許任何部件成為另一個部件的父部件。也就是說,使用一個Label作為其他部件的容器是一個奇怪的選擇。一個Frame將更有意義。
import tkinter as tk
class Draggable()。
def __init__(self, widget, x=0, y=0)。
self.start_x = 0; self.start_y = 0。
self.start_y = 0。
widget.place(x=x, y=y)
widget.bind("<ButtonPress-1>", self.drag_start)
widget.bind("<B1-Motion>", self.drag)
def drag_start(self, event)。
self.start_x = event.x
self.start_y = event.y
def drag(self, event)。
delta_x = event.x - self.start_x
delta_y = event.y - self.start_y
# move the widget to the new position.
x = event.widget.winfo_x() delta_x
y = event.widget.winfo_y() delta_y
event.widget.place(x=x, y=y)
root = tk.Tk()
root.geometry("400x400"/span>)
container = tk.Label(root, bd=2, relief="凸起")
container.pack(side="top", fill="both", expand=True, padx=20, pady=20)
l1 = tk.Label(container, text="Label #1"/span>)
l2 = tk.Label(container, text="Label #2")
Draggable(l1, x=10, y=10)
Draggable(l2, x=10, y=30)
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330570.html
標籤:
