Реализация Python tkinter zoom с черепахой и одним / двойным щелчком - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь нарисовать черепаху на холсте, а также пытаюсь реализовать функцию уменьшения масштаба с помощью одного щелчка и события двойного щелчка. Когда я не пытаюсь реализовать tkinter, код работает абсолютно нормально, но когда я пытаюсь выполнить функцию уменьшения масштаба, я не могу выполнить ее. Буду очень признателен за любые предложения или помощь.

Вот мой код:

import turtle
import tkinter as tk
from tkinter import *

root = tk.Tk()
canvas = tk.Canvas(master = root, width = 2700, height = 2500)
canvas.pack(fill=BOTH, expand=1)
mb = Menubutton(None, text='Mouse Clicks')
mb.pack()
t = turtle.RawTurtle(canvas)

def parallel():
window= canvas

def zoomin(event):
    d = event.delta
    if d < 0:
       amt=0.9
    else:
       amt=1.1

    canvas.scale(ALL, 2700,2500 , amt,amt)
    mb.bind('<Button-1>', zoomin)

    def zoomout(event1, d1, amt1):
        d1 = event1.delta
        if d1 >0:
           amt1=1.1
        else:
           amt1=0.7
    canvas.scale(ALL, 2700,2500 , amt, amt)
    mb.bind('<Double-1>', zoomout)

    t.pu()
    t.left(90)
    t.forward(70)
    t.rt(90)
    t.pd()
    t.width(8)
    t.color("LightGray")
    t.forward(1200)
    t.back(1200)
    t.pu()
    t.left(90)
    t.forward(25)
    t.rt(90)
    t.pd()
    t.forward(1200)
    t.back(1200)

    t.pu()
    t.setposition(-85, 45)
    t.pd()
    t.forward(80)
    t.left(90)
    t.forward(80)
    t.left(90)
    t.forward(80)
    t.left(90)
    t.forward(80)
    t.left(90)

    t.penup()                
    t.goto(-200, 160)       
    t.write("Class", True, align="center", font=('TimesNewRoman', 20, 'normal'))
    t.pendown()              
    t.penup()
    t.goto(-45, 150)
    t.write("1", True, align="center", font=('TimesNewRoman', 50, 'normal'))
    t.pendown()

    parallel() 
    t.mainloop()

Спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Ваша программа кажется неполной и неправильно структурированной. Ниже приведен мой минималистский пример того, что, как я полагаю, вы пытаетесь сделать. Он рисует круг, а затем позволяет вам использовать колесо мыши, чтобы увеличивать и уменьшать его:

import tkinter as tk
from turtle import RawTurtle, TurtleScreen, ScrolledCanvas

def zoom(event):
    amount = 0.9 if event.delta < 0 else 1.1

    canvas.scale(tk.ALL, 0, 0, amount, amount)

root = tk.Tk()

canvas = ScrolledCanvas(master=root, width=2000, height=2000)
canvas.pack(fill=tk.BOTH, expand=tk.YES)

screen = TurtleScreen(canvas)

turtle = RawTurtle(screen)

turtle.penup()
turtle.sety(-250)
turtle.pendown()
turtle.circle(250)

canvas.bind('<MouseWheel>', zoom)

screen.mainloop()

Обратите внимание, что некоторые элементы черепахи, такие как dot() и текст, сгенерированный с помощью write(), не будут масштабироваться, они останутся неизменными. Вам нужно прочитать о методе .scale() и углубиться в tkinter, чтобы потенциально обойти это. Или вручную масштабируйте свои шрифты.

...