python - 如何通过拖放在 Tkinter 笔记本中重新排序选项卡
问题描述
我创建了一个带有标签的笔记本,我想通过拖放来重新排列标签。
我尝试创建一个示例,其中未在笔记本中创建的按钮被拖动,而不是在笔记本中创建的选项卡。
import tkinter as tk
from tkinter import ttk
import Tkdnd
def make_draggable(widget):
widget.bind("<Button-1>", on_drag_start)
widget.bind("<B1-Motion>", on_drag_motion)
def on_drag_start(event):
print "on_drag_start: "
print "widget event: ", event
print "widget: ", event.widget
widget = event.widget
widget._drag_start_x = event.x
widget._drag_start_y = event.y
def on_drag_motion(event):
print "on_drag_motion: "
print "widget event: ", event
widget = event.widget
x = widget.winfo_x() - widget._drag_start_x + event.x
y = widget.winfo_y() - widget._drag_start_y + event.y
print "tuple: ", x, y
widget.place(x=x, y=y)
root = tk.Tk()
root.title("Tab Widget")
btn = tk.Button(text="testing")
btn.pack()
make_draggable(btn)
tabControl = ttk.Notebook(root)
tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tabControl.add(tab1, text='Tab 1')
tabControl.add(tab2, text='Tab 2')
tabControl.pack(expand=1, fill="both")
make_draggable(tab1)
make_draggable(tab2)
tab1.bind("<Button-1>", on_drag_start)
tab1.bind("<B1-Motion>", on_drag_motion)
tab2.bind("<Button-1>", on_drag_start)
tab2.bind("<B1-Motion>", on_drag_motion)
ttk.Label(tab1, text="Welcome to \GeeksForGeeks").grid(column=0, row=0, padx=30, pady=30)
ttk.Label(tab2, text="Lets dive into the\world of computers").grid(column=0, row=0, padx=30, pady=30)
root.mainloop()
解决方案
推荐阅读
- android - MVP 模型是否应该包含 android 特定术语?
- message-queue - MassTransit:合同类的模式和实践
- uml - 用例图中的多个参与者,但都具有相同的一般角色
- qt - 使用 ApplicationWindow 时热重载 QML
- javascript - 如果在点击打印按钮之前滚动表格,则粘性标题会打印到页面的一半
- sql - 拆分和序列字符串 - Oracle SQL
- facebook-graph-api - 从 facebook-group-album 中的 graph-api 获取视频网址
- javascript - Dropzone JS 不使用配置
- puppet - Puppet 事实在 YAML 中获取内存值
- python - Pandas 数据帧,在 NAN 上重置 cumsum