Tkinter:使 canvas 可拖动
Tkinter : Make canvas draggable
我正在创建一个项目,涉及在 canvas 上制作 RawTurtle
。我想知道如果绘图超出屏幕我该怎么办。谁能告诉我如何使 Tkinter Canvas 小部件可拖动?
from tkinter import *
root = Tk()
c = Canvas(root)
t = RawTurtle(c)
....# What can i do to have a drag function
root.mainloop()
这是 python 3 的答案,但更改导入后它应该可以与 python 2
一起正常工作
#!python3
import tkinter as tk
import turtle
def run_turtles(*args):
for t, d in args:
t.circle(200, d)
root.after_idle(run_turtles, *args)
def scroll_start(event):
screen.scan_mark(event.x, event.y)
def scroll_move(event):
screen.scan_dragto(event.x, event.y, gain=1)
root = tk.Tk()
root.geometry("700x700")
root.withdraw()
frame = tk.Frame(bg='black')
frame.pack(fill='both', expand=True)
tk.Label(frame, text=u'Hello', bg='grey', fg='white').pack(fill='x')
screen = turtle.ScrolledCanvas(frame)
screen.pack(fill="both", expand=True)
turtle1 = turtle.RawTurtle(screen)
turtle2 = turtle.RawTurtle(screen)
screen.bind("<ButtonPress-1>", scroll_start)
screen.bind("<B1-Motion>", scroll_move)
turtle1.ht(); turtle1.pu()
turtle1.left(90); turtle1.fd(200); turtle1.lt(90)
turtle1.st(); turtle1.pd()
turtle2.ht(); turtle2.pu()
turtle2.fd(200); turtle2.lt(90)
turtle2.st(); turtle2.pd()
root.deiconify()
run_turtles((turtle1, 3), (turtle2, 4))
root.mainloop()
值得注意:
- 出于某种原因,一旦添加了海龟,canvas 绑定就会停止工作,对此最好的解决方法是在添加海龟之后添加绑定。或者,您可以改为绑定到顶部 window。
- canvas只能平移到其滚动区域的边缘,如果你想进一步平移,你需要把它调大。
我正在创建一个项目,涉及在 canvas 上制作 RawTurtle
。我想知道如果绘图超出屏幕我该怎么办。谁能告诉我如何使 Tkinter Canvas 小部件可拖动?
from tkinter import *
root = Tk()
c = Canvas(root)
t = RawTurtle(c)
....# What can i do to have a drag function
root.mainloop()
这是 python 3 的答案,但更改导入后它应该可以与 python 2
一起正常工作#!python3
import tkinter as tk
import turtle
def run_turtles(*args):
for t, d in args:
t.circle(200, d)
root.after_idle(run_turtles, *args)
def scroll_start(event):
screen.scan_mark(event.x, event.y)
def scroll_move(event):
screen.scan_dragto(event.x, event.y, gain=1)
root = tk.Tk()
root.geometry("700x700")
root.withdraw()
frame = tk.Frame(bg='black')
frame.pack(fill='both', expand=True)
tk.Label(frame, text=u'Hello', bg='grey', fg='white').pack(fill='x')
screen = turtle.ScrolledCanvas(frame)
screen.pack(fill="both", expand=True)
turtle1 = turtle.RawTurtle(screen)
turtle2 = turtle.RawTurtle(screen)
screen.bind("<ButtonPress-1>", scroll_start)
screen.bind("<B1-Motion>", scroll_move)
turtle1.ht(); turtle1.pu()
turtle1.left(90); turtle1.fd(200); turtle1.lt(90)
turtle1.st(); turtle1.pd()
turtle2.ht(); turtle2.pu()
turtle2.fd(200); turtle2.lt(90)
turtle2.st(); turtle2.pd()
root.deiconify()
run_turtles((turtle1, 3), (turtle2, 4))
root.mainloop()
值得注意:
- 出于某种原因,一旦添加了海龟,canvas 绑定就会停止工作,对此最好的解决方法是在添加海龟之后添加绑定。或者,您可以改为绑定到顶部 window。
- canvas只能平移到其滚动区域的边缘,如果你想进一步平移,你需要把它调大。