2017-02-04 9 views
0

In Tkinter, Python, versuche ich derzeit, eine Ausgabe von so zu machen, wenn eine Schaltfläche angeklickt wird, wird eine gewinkelte Linie (in 45-Grad-Richtung) auf die Leinwand gelegt. Hier ist der Code, den ich habe versucht, so weit:45 Grad Winkel Python Tkinter Canvas

from tkinter import * 
root = Tk() 
root.geometry("900x900") 
canvas = Canvas(root, width=800, height=820) 
canvas.pack() 
png = PhotoImage(file = r'C:\Users\--\Desktop\Programming\GP\europe1.gif') #Map of europe 
canvas.create_image(0, 0, image = png, anchor = "nw") 
london = canvas.create_rectangle(5, 0, 10, 5, fill='red') 
londontext = canvas.create_text(10, 10, text="London") #Creating labelled cities for europe picture 
paris = canvas.create_rectangle(5, 0, 10, 5, fill='red') 
paristext = canvas.create_text(10, 10, text="Paris") 
canvas.move(london, 226, 390) 
canvas.move(londontext, 210, 374) 
canvas.move(paristext, 230, 447) # Sets correct coords for the two cities 
canvas.move(paris, 247, 462) 
def gotoparis(): 
    parisline = canvas.create_line(100, 0, 100, 100, 45) 
def gotolondon():     # Trying to make a line form between the two cities 
    londonline = canvas.create_line(100, 0, 100, 100, 45) 
def londonclick(event): 
    londoninterface = Tk() 
    londoninterface.geometry("400x400") 
    ll = Label(londoninterface, text="London Airport") 
    ll.pack() 
    blank = Label(londoninterface, text="") # Creating new windows 
    blank.pack() 
    l1 = Label(londoninterface, text="Send Flight To:") 
    l1.pack() 
    toparis = Button(londoninterface, text="Paris", command=gotoparis) 
    toparis.pack() 
def parisclick(event): 
    parisinterface = Tk() 
    parisinterface.geometry("400x400") 
    ll = Label(parisinterface, text="Paris Airport") 
    ll.pack() 
    blank = Label(parisinterface, text="") 
    blank.pack() 
    l1 = Label(parisinterface, text="Send Flight To:") 
    l1.pack() 
    tolondon = Button(parisinterface, text="London") 
    tolondon.pack() 

canvas.tag_bind(london, '<ButtonPress-1>', londonclick) # Makes it so when rectangle is clicked, a new window pops up 
canvas.tag_bind(paris, '<ButtonPress-1>', parisclick) 

Wie Sie wahrscheinlich sagen, ich versuche, eine Flughafen-ähnliches Spiel zu machen, wo Sie ein Flugzeug zu einem Ziel gesetzt, und damit schafft sie eine Linie von wo es enden wird. Dieser Code ist ein bisschen schwer zu verstehen, was ich versuche zu tun, aber kurz gesagt, ich möchte eine Linie zwischen zwei Leinwand erstellt Rechtecke, wenn ein Tkinter Button geklickt wird. Nur um zu verdeutlichen, verwende ich python 3.5.2 tkinter. Dieser Code erstellt auch keine Fehlermeldung oder irgendeine Art von Fehler, aber es tut nicht, was ich tun soll. Das fasst es im Grunde zusammen. Hier

+0

ich eine Fehlermeldung, wenn ich die 'Paris' Schaltfläche klicken, nachdem an dem Londoneren Punkt klicken : '_tkinter.TclError: falsche # Koordinaten: erwartet eine gerade Zahl, bekam 5' weil Sie 5 Koordinaten in' canvas.create_line (100, 0, 100, 100, 45) 'anstatt einer geraden Zahl geben. –

+0

die 45 ist gemeint, um die Winkelgrße z.B. 45 ° Winkel – Jake

+0

Ich sehe keine Frage in Ihrer Frage. Wozu brauchst du Hilfe? Alles, was Sie getan haben, ist, uns zu sagen, was Sie tun wollen, aber das Problem, das Sie haben, nicht erklärt haben. –

Antwort

1

ist die Syntax für eine Linie auf eine Leinwand zu schaffen:

Canvas.create_line(x_1, y_1, x_2, y_2, ..., x_n, y_n, **kwargs)

(x_i, y_i) sind die Punkte, die durch die Linie verbunden werden und die kwargs eingestellt den Stil der Linie (füllen, Breite, ... siehe here für eine erschöpfende Liste). Sie können also keinen 45 ° -Winkel als Argument angeben.

Ich habe die Koordinaten der Mitte jedes Quadrats verwendet, um die Linie zwischen ihnen zu zeichnen. Das anfängliche Zentrum einer Stadt ist in (7.5, 2.5), dann wird sie bewegt durch (x_city, y_city):

london = canvas.create_rectangle(5, 0, 10, 5, fill='red') 
londontext = canvas.create_text(10, 10, text="London") #Creating labelled cities for europe picture 
paris = canvas.create_rectangle(5, 0, 10, 5, fill='red') 
paristext = canvas.create_text(10, 10, text="Paris") 

# Sets correct coords for the two cities 
x_london, y_london = 226, 390 
canvas.move(london, x_london, y_london) 
canvas.move(londontext, 210, 374) 
x_paris, y_paris = 247, 462 
canvas.move(paris, x_paris, y_paris) 
canvas.move(paristext, 230, 447) 

def gotoparis(): 
    parisline = canvas.create_line(x_london + 7.5, y_london + 2.5, 
            x_paris + 7.5, y_paris + 2.5) 
def gotolondon():     
    londonline = canvas.create_line(x_london + 7.5, y_london + 2.5, 
            x_paris + 7.5, y_paris + 2.5) 
+0

Wenn die Go To London-Taste gedrückt wird, passiert nichts. - EDIT: Ich habe einen Fehler mit dem Button Befehl gemacht, das funktioniert, danke :) – Jake

Verwandte Themen