Некоторые команды Tkinter create_line не рисуют вертикальные линии, но другие делают - PullRequest
0 голосов
/ 25 октября 2018

У меня есть проект Tkinter, который включает класс для рисования линий.ОБНОВЛЕНИЕ: Вот фрагмент, который вы можете запустить, который воспроизводит проблему на моем компьютере.Я думаю, что он только отказывается рисовать вертикальные линии?

import tkinter as tk
Unit=32
class Region:
    def __init__(self, name, mapWidth, mapHeight, gen):
        self.name=name
        self.mapWidth=mapWidth
        self.mapHeight=mapHeight
        self.gen=gen
        self.locations={}
        self.current_loc_area = 1
        self.current_pokemon =[]

class Route:
    thick = 24
    global Unit
    def __init__(self, x1, y1, x2, y2, color, number):
        self.x1 = (x1 * 32)- (Unit/2)
        self.y1 = (y1 * 32)- (Unit/2)
        self.x2 = (x2 * 32)- (Unit/2)
        self.y2 = (y1 * 32)- (Unit/2)
        self.color = color
        self.number = number
        self.tag = None
        self.areaData = None
        self.loc_url='None'
        self.trimColors = ['#39314B','#EEA160']

    def constructRoute(self):
        self.tag = myRegion.name + "-route-" + str(self.number)
        C.create_line(self.x1, self.y1, self.x2, self.y2, fill=self.trimColors[0], width=self.thick+8)
        C.create_line(self.x1, self.y1, self.x2, self.y2, fill=self.trimColors[1], width=self.thick)
        C.create_line(self.x1, self.y1, self.x2, self.y2, fill=self.color, width=self.thick-8, tags=self.tag)

land_color='#BF7958'
root= tk.Tk()
myRegion = Region('johto', 24, 18, 2)
#create canvas-----
C=tk.Canvas(root, width=myRegion.mapWidth * 32, height=myRegion.mapHeight * 32)
C.pack()  

#Construct Routes and Towns--------------

route29Inst = Route(17,12, 20,12, land_color, 29)
route29 = route29Inst.constructRoute()

route30Inst = Route(8,7, 8,9, land_color, 30)
route30 = route30Inst.constructRoute()

route31Inst = Route(15,7, 16,7, land_color, 31)
route31 = route31Inst.constructRoute()

route32Inst = Route(14,8, 14,14, land_color, 32)
route32 = route32Inst.constructRoute()

route33Inst = Route(13,15, 14,15, land_color, 33)
route33 = route33Inst.constructRoute()

route34Inst = Route(11,15, 10,15, land_color, 34)
route34 = route34Inst.constructRoute()

root.mainloop()

и когда я делаю это для некоторых линий, маршрут 29 - 34, появляется примерно половина из них, и я не могу понять, что с ним не так.Кажется, это вызывает ошибку только для определенных линий, и я думаю, что это только вертикальные рисунки.Даже диагональные рисунки не работают.Все это прекрасно работало в течение последнего месяца, пока я не начал возиться с переменной «Unit» и добавить еще несколько маршрутов.Для проверки измените пары чисел в экземпляре routeXInst.Эти пары чисел являются начальной и конечной точкой линии.(извините, если мой словарь странный, я все еще новичок)

1 Ответ

0 голосов
/ 30 октября 2018

В моем определении класса проблема в 1 символе:

self.y2 = ( y1 * 32) - Единица / 2

Это приведет к появлению второй вертикалиточка должна быть точно такой же, как и первая.

это, очевидно, должно быть: self.y2 = ( y2 * 32) - Unit / 2

Я уступилк опасностям копирования и вставки, чтобы сэкономить время, вместо этого стоило мне много разочарований.Извлеченный урок: не торопитесь с кодом!Будь очень обдуманным.Внимательно рассмотрите это.Чувствую себя как тупица :) 1013 *

...