tkinter可移动窗口
时间: 2023-11-03 19:06:44 浏览: 28
在tkinter中,可以使用鼠标事件和canvas画布来实现可移动窗口的效果。
首先,创建一个顶层窗口,并将其设置为无边框。
```python
from tkinter import *
root = Tk()
root.overrideredirect(True)
```
然后,创建一个画布,并将其放置在窗口中。
```python
canvas = Canvas(root, bg="white")
canvas.pack(fill=BOTH, expand=True)
```
接下来,定义一个鼠标事件处理函数,用于记录鼠标点击时的坐标和窗口的当前位置。
```python
def on_mouse_press(event):
global last_x, last_y
last_x, last_y = event.x, event.y
def on_mouse_move(event):
global last_x, last_y
x, y = event.x - last_x, event.y - last_y
root.geometry("+%d+%d" % (root.winfo_x() + x, root.winfo_y() + y))
```
最后,将鼠标事件绑定到画布上。
```python
canvas.bind("<ButtonPress-1>", on_mouse_press)
canvas.bind("<B1-Motion>", on_mouse_move)
```
完整代码如下:
```python
from tkinter import *
root = Tk()
root.overrideredirect(True)
canvas = Canvas(root, bg="white")
canvas.pack(fill=BOTH, expand=True)
def on_mouse_press(event):
global last_x, last_y
last_x, last_y = event.x, event.y
def on_mouse_move(event):
global last_x, last_y
x, y = event.x - last_x, event.y - last_y
root.geometry("+%d+%d" % (root.winfo_x() + x, root.winfo_y() + y))
canvas.bind("<ButtonPress-1>", on_mouse_press)
canvas.bind("<B1-Motion>", on_mouse_move)
root.mainloop()
```
运行代码后,单击窗口并拖动鼠标即可移动窗口。