【问题标题】:Python3 TKinter set Canvas coordinates shownPython3 TKinter 设置画布坐标显示
【发布时间】:2015-05-18 17:28:07
【问题描述】:

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

【问题讨论】:

  • 我认为这是不可能的。相反,请尝试使用Linear interpolation 将您的长/纬度坐标转换为像素坐标。

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


【解决方案1】:

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

类似:

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

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

【讨论】:

  • 非常感谢,我对 Tkinter 还很陌生,所以我得稍微玩一下。如果可以的话,如果我有任何其他问题要问您,我会反馈给您?
  • 如果您有新问题,而不是关于此特定答案的问题,请将其作为新问题发布,而不是在此处作为评论。
猜你喜欢
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 2022-10-23
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
相关资源
最近更新 更多