Python Черепаха не в Tkinter Холст и кнопка не в углу - PullRequest
0 голосов
/ 30 января 2020

Я работаю над созданием игры с черепахой в Tkinter Canvas Module. Я столкнулся с проблемой, когда при попытке создать новую черепаху она появляется в новом окне вместо холста. Что я сделал не так? Я также хотел бы решить мою проблему с кнопкой выхода. Я пытался разместить его в правом нижнем углу. Я пробовал .place() и .grid(), но безуспешно. Я также пробовал другие решения для stackoverflow, но они либо приводят к ошибке, либо просто исчезают, вероятно, за холстом.

Вот мой код:

import tkinter as tk
import random
import turtle
import time
import sys

def spawn(e=None):
    xrand = random.randint(0,500)
    yrand = random.randint(0,500)
    turtle.RawTurtle(app)
    turtle.shape("square")
    turtle.penup()
    turtle.goto(x=xrand,y=yrand)

def systemap(e=None):
    app.pack()
    button.pack()

def f(e=None):
    t.setheading(90)
    t.forward(1)

def l(e=None):
    t.setheading(180)
    t.forward(1)

def r(e=None):
    t.setheading(0)
    t.forward(1)

def b(e=None):
    t.setheading(270)
    t.forward(1)

def quit(e=None):
    time.sleep(1)
    window.destroy()
    sys.exit()

window = tk.Tk()
#window.iconbitmap('py.ico')
window.title("Turtle Graphics")
window.geometry("750x500")
window.resizable(False, False)

button = tk.Button(window, text="Exit", command = quit)

app = tk.Canvas(master=window, width=500, height=500, bg="white")

t=turtle.RawTurtle(app)

window.bind("<Up>", f)
window.bind("<Left>", l)
window.bind("<Right>", r)
window.bind("<Down>", b)

window.bind("<w>", f)
window.bind("<a>", l)
window.bind("<d>", r)
window.bind("<s>", b)

window.bind("<e>", spawn)

window.bind("<Escape>", quit)

systemap()

window.mainloop()


1 Ответ

0 голосов
/ 31 января 2020

Я обнаружил, что вы должны использовать .pack() или .grid() для всего, что происходит в окне, иначе оно не будет работать, поэтому вы не можете использовать кнопку, используя .pack(), а затем текст, используя .grid(). Таким образом, вы можете использовать .place для всех вещей, которые нужно go в окне, чтобы поместить их туда, где вам нужно, чтобы это было что-то вроде этого:

import tkinter as tk
import random
import turtle
import time
import sys

def systemap(e=None):
    app.place(x=100,y=-4)
    button.place(x=720,y=475)

def f(e=None):
    t.setheading(90)
    t.forward(1)

def l(e=None):
    t.setheading(180)
    t.forward(1)

def r(e=None):
    t.setheading(0)
    t.forward(1)

def b(e=None):
    t.setheading(270)
    t.forward(1)

def quit(e=None):
    time.sleep(1)
    window.destroy()
    sys.exit()

window = tk.Tk()
window.iconbitmap('py.ico')
window.title("Turtle Graphics")
window.geometry("750x500")
window.resizable(False, False)

button = tk.Button(window, text="Exit", command = quit)

app = tk.Canvas(master=window, width=500, height=500, bg="white")

t=turtle.RawTurtle(app)

window.bind("<Up>", f)
window.bind("<Left>", l)
window.bind("<Right>", r)
window.bind("<Down>", b)

window.bind("<w>", f)
window.bind("<a>", l)
window.bind("<d>", r)
window.bind("<s>", b)

window.bind("<Escape>", quit)

systemap()

window.mainloop()
...