我无法让 tkinter 屏幕中的乌龟工作 它应该是一个绘画应用程序,但是当我尝试实现该界面时,海龟仍然出现,而应该在界面中的那个应用程序不起作用,现在它根本没有出现
代码:
import tkinter as tk
from tkinter import *
import turtle
menu=Tk()
menu.title('Paint')
frame = tk.Frame(menu).grid( column=8, sticky="nsew")
canvas=tk.Canvas(menu,width=500, height=100).grid(column=6,sticky=N+E+W)
turtle.tracer(False)
turtle.hideturtle()
#turtle actions
def draw(x, y):
t.ondrag(None)
t.down()
t.goto(x, y)
t.up()
turtle.update()
t.ondrag(draw)
def move(x, y):
turtle.onscreenclick(None)
t.goto(x, y)
turtle.onscreenclick(move)
turtle.update()
t = turtle.Turtle()
t.shape("circle")
t.fillcolor("")
t.up()
t.pencolor('black')
cc='black'
t.pensize(5)
t.turtlesize(1000000, 1000000)
ts = turtle.getscreen()
canvas = tk.Canvas(menu)
canvas.config(width=600, height=600)
#canvas.pack(side=LEFT)
screen = turtle.TurtleScreen(canvas)
#menu for colors and shapes
#spacers
filler1=Label(menu,width=10).grid(column=2,row=0)
filler2=Label(menu,width=10).grid(column=0,row=0)
filler3=Label(menu,width=10).grid(column=4,row=0)
filler4=Label(menu,width=10).grid(column=2,row=15)
#color buttons
lc=Label(menu,text='colors').grid(column=1, row=0)
def red() :
global cc
cc='red'
t.pencolor('red')
bred = Button (
menu,
bg='red',
width=10,
command=red
).grid(column=1, row=1)
def orng() :
global cc
cc='orange'
t.pencolor('orange')
borng = Button (
menu,
bg='orange',
width=10,
command=orng
).grid(column=1, row=2)
def yellow() :
global cc
cc='yellow'
t.pencolor('yellow')
byellow = Button (
menu,
bg='yellow',
width=10,
command=yellow
).grid(column=1, row=3)
def green() :
global cc
cc='green'
t.pencolor('green')
bgreen = Button (
menu,
bg='green',
width=10,
command=green
).grid(column=1, row=4)
def blue() :
global cc
cc='blue'
t.pencolor('blue')
bblue = Button (
menu,
bg='blue',
width=10,
command=blue
).grid(column=1, row=5)
def purp() :
global cc
cc='purple'
t.pencolor('purple')
bpurp = Button (
menu,
bg='purple',
width=10,
command=purp
).grid(column=1, row=6)
def pink() :
global cc
cc='pink'
t.pencolor('pink')
bpink = Button (
menu,
bg='pink',
width=10,
command=pink
).grid(column=1, row=7)
def black() :
global cc
cc='black'
t.pencolor('black')
bblack = Button (
menu,
bg='black',
width=10,
command=black
).grid(column=1, row=8)
def white() :
global cc
cc='white'
t.pencolor('white')
bblack = Button (
menu,
text='eraser',
bg='white',
width=10,
command=white
).grid(column=1, row=8)
t.ondrag(draw)
turtle.onscreenclick(move)
turtle.update()
turtle.listen()
turtle.done()
menu.mainloop()
我尝试过,但 tkinter 屏幕中的海龟不起作用或不显示,但海龟屏幕仍然弹出
turtle
使用 tkinter
创建窗口(自己的 Tk()
)并运行它(自己的 mainloop()
),并且 tkinter
应该只有一个 Tk()
和一个 mainloop()
- 所以你不必创建它们
您可以使用
访问海龟窗口root = turtle.getcanvas().winfo_toplevel()
稍后您可以使用它来添加小部件。
因为
turtle already used
pack()to put
Canvasso you can't use
grid()- but you can use
pack()to put
Frame()in
rootand later use
grid()`可以将其他小部件放入此框架中。
root = turtle.getcanvas().winfo_toplevel()
frame = tk.Frame(root)
frame.pack()
tk.Label(frame, text='COLORS').grid(column=1, row=0)
tk.Button(frame, bg='red', width=10, command=lambda:set_pen_color('red') ).grid(column=1, row=1)
最小工作代码:
import turtle
import tkinter as tk # PEP8: `import *` is not preferred
# --- functions --- # PEP8: all functions before main code
def draw(x, y):
t.ondrag(None)
t.down()
t.goto(x, y)
t.up()
turtle.update()
t.ondrag(draw)
def move(x, y):
turtle.onscreenclick(None)
t.goto(x, y)
turtle.onscreenclick(move)
turtle.update()
def set_pen_color(color) :
global pen_color
pen_color = color
t.pencolor(color)
# --- main ---
pen_color = 'black'
t = turtle.Turtle()
#t.hideturtle()
t.shape("circle")
t.fillcolor("")
t.up()
t.pensize(5)
t.turtlesize(1000000, 1000000)
t.ondrag(draw)
t.pencolor(pen_color)
# --- add widgets ---
# access to turtle's window
root = turtle.getcanvas().winfo_toplevel()
frame = tk.Frame(root)
frame.pack()
tk.Label(frame, text='COLORS').grid(column=1, row=0)
tk.Button(frame, bg='red', width=10, command=lambda:set_pen_color('red') ).grid(column=1, row=1)
tk.Button(frame, bg='orange', width=10, command=lambda:set_pen_color('orange')).grid(column=1, row=2)
tk.Button(frame, bg='yellow', width=10, command=lambda:set_pen_color('yellow')).grid(column=1, row=3)
tk.Button(frame, bg='green', width=10, command=lambda:set_pen_color('green') ).grid(column=1, row=4)
tk.Button(frame, bg='purple', width=10, command=lambda:set_pen_color('purple')).grid(column=1, row=5)
tk.Button(frame, bg='pink', width=10, command=lambda:set_pen_color('pink') ).grid(column=1, row=6)
tk.Button(frame, bg='black', width=10, command=lambda:set_pen_color('black') ).grid(column=1, row=7)
tk.Button(frame, bg='white', width=10, command=lambda:set_pen_color('white') ).grid(column=1, row=8)
# ---
turtle.tracer(False)
turtle.onscreenclick(move)
turtle.update()
turtle.listen()
turtle.done() # this runs `tkinter.mainloop()`