2017-02-04 3 views
0

В tkinter, python, в настоящее время я пытаюсь сделать вывод так, что при нажатии кнопки на холст помещается наклонная линия (направленная в направлении 45 градусов). Вот код, который я пытался до сих пор:45 Угол угла 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) 

Как вы можете сказать, что я пытаюсь сделать аэропорт, как игра, где вы можете установить самолет к месту назначения, и что он создает линию где он будет в конечном итоге. Этот код немного трудно понять, что я пытаюсь сделать, но, короче говоря, я хочу создать линию между двумя созданными прямоугольниками, когда нажата кнопка tkinter. Чтобы уточнить, я использую python 3.5.2 tkinter. Кроме того, этот код не создает сообщение об ошибке или какой-либо тип ошибки, но он не выполняет то, что я хочу сделать. Это в основном суммирует его.

+0

Я получаю сообщение об ошибке, когда я нажимаю кнопку 'Paris' после нажатия на точке Лондона : '_tkinter.TclError: неправильные # координаты: ожидаемое четное число, получено 5', потому что вы даете 5 координат в' canvas.create_line (100, 0, 100, 100, 45) 'вместо четного числа. –

+0

45 означает угол, например. 45 ° угол – Jake

+0

Я не вижу вопроса в вашем вопросе. Как я могу вам помочь? Все, что вы сделали, это сказать нам, что вы хотите сделать, но не объяснили, что у вас есть. –

ответ

1

Вот синтаксис для создания линии на холсте:

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

(x_i, y_i) являются точками, которые будут связаны линией и kwargs установить стиль линии (заполнение, ширина, ... см. here для исчерпывающего списка). Поэтому вы не можете дать угол 45 ° в качестве аргумента.

Я использовал координаты центра каждого квадрата, чтобы провести линию между ними. Первоначальный центр города находится в (7,5, 2,5), то он перемещается (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

Когда кнопка Go To London нажата, ничего не происходит. - EDIT: я ошибся с командой кнопки, это работает, спасибо :) – Jake