Python3 TKinter设置显示的Canvas坐标

时间:2015-03-16 14:38:03

标签: python-3.x tkinter tkinter-canvas

我正在创建地图的GUI表示,但是无法正确缩放画布。我目前正在绘制杜布罗夫尼克市,杜布罗夫尼克的所有点都有42N到43N之间的纬度和18E到19E之间的经度。我想知道是否有办法设置画布,以便窗口的左上角是坐标(42,19),右下角是(43,48)?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

据我所知,你没有内置的方法可以做到这一点。 但你当然可以实现自己的画布来完成这项工作。

类似的东西:

class GeoCanvas(Tk.Canvas):
    def __init__(self, master, uperleftcoords, bottomrightcoords, **kwargs):
        Canvas.__init__(self, master, **kwargs)

        self.minLat = uperleftcoords.getLat()
        self.maxLong = uperleftcoords.getLong()

        self.maxLat = bottomrightcoords.getLat()
        self.minLong = bottomrightcoords.getLong()

        self.width = **kwargs["width"]
        self.height= **kwargs["height"]

        self.geoWidth = self.maxLat - self.minLat
        self.geoHeight= self.maxLong - self.minLong

    def fromLatLong2pixels(self, coords):
        """ Convert a latitude/longitude coord to a pixel coordinate use it for every point you want to draw."""
        if ( not self.minLat <= coords.getLat() <= self.maxLat) or (not self.minLong <= coords.getLong() <= self.laxLong ):
            return None
        else:
            deltaLat = coords.getLat() - self.minLat
            deltaLong= coords.getLong()- self.minLong

            latRatio = deltaLat / self.geoWidth
            longRatio= deltaLong/ self.geoHeight

            x = latRation * self.width
            y = longRatio * self.height

            return x,y

然后,您可以覆盖用于将每个纬度/经度坐标转换为画布上的点的绘图方法。