Python 如何在Tkinter笔记本中通过拖放对选项卡重新排序

Python 如何在Tkinter笔记本中通过拖放对选项卡重新排序,python,tkinter,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("

我已经创建了一个有标签的笔记本,我想通过拖放来重新排列标签

我尝试创建一个示例,其中按钮(不是在笔记本中创建的)被拖动,但选项卡(不是在笔记本中创建的)被拖动

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()
将tkinter作为tk导入
从tkinter导入ttk
导入Tkdnd
def使_可拖动(小部件):
widget.bind(“,在拖动开始时)
widget.bind(“,在拖动运动时)
拖动启动时的def(事件):
打印“开始时拖动”:
打印“小部件事件:”,事件
打印“小部件:”,event.widget
widget=event.widget
widget.\u拖动\u开始\u x=event.x
widget.\u拖动\u开始\u y=event.y
拖动运动时的def(事件):
打印“在拖动运动时”:
打印“小部件事件:”,事件
widget=event.widget
x=widget.winfo\u x()-widget.\u拖动\u开始\u x+事件.x
y=widget.winfo\u y()-widget.\u拖动\u开始\u y+事件.y
打印“元组:”,x,y
widget.place(x=x,y=y)
root=tk.tk()
root.title(“选项卡小部件”)
btn=tk.按钮(text=“测试”)
btn.pack()
使可拖动(btn)
tabControl=ttk.Notebook(根目录)
tab1=ttk.Frame(tabControl)
tab2=ttk.Frame(tabControl)
tabControl.add(tab1,text='tab1')
tabControl.add(tab2,text='tab2')
tabControl.pack(expand=1,fill=“两者”)
使可拖动(表1)
使_可拖动(表2)
tab1.bind(“,开始拖动时)
tab1.bind(“,在拖动运动时)
tab2.bind(“,开始拖动时)
tab2.bind(“,在拖动运动时)
ttk.Label(tab1,text=“欢迎使用\geeksforgeks”).grid(列=0,行=0,padx=30,pady=30)
ttk.Label(tab2,text=“让我们深入计算机世界”).grid(列=0,行=0,padx=30,pady=30)
root.mainloop()

在本文中,“笔记本”指的是什么?笔记本?@PeterMortensen不,它是Python标准GUI库tkinter中的一个小部件。