1

假设我有一个Paper (wx.Panel),我想在其上绘制一个以毫米为单位的图表,所以我将其映射模式设置PaintDc为毫米:dc.SetMapMode(wx.MM_METRIC)然后我要绘制水平轴。

class Paper(wx.Panel):
    def onPaint(self, event):
        dc = wx.PaintDC(self)
        dc.SetMapMode(wx.MM_METRIC)
        w, h = self.GetClientSize() <<< This line get size in pixel.
        dc.DrawLine(0, h-10, w-1, h-10)

我希望轴保持距离纸张底部 10 毫米,因此我将纸张的尺寸查询为w, h = self.GetClientSize(),但问题是尺寸以像素为单位而不是毫米。

以mm为单位获取面板尺寸的功能是什么,或者是否有将像素尺寸映射到mm的功能?

4

2 回答 2

2

我不是 python 程序员,也没有使用过 wxWidgets 的时间,所以我的回答纯粹是假设没有任何方法可以为你做到这一点。

您需要获取屏幕的分辨率(通常为 75dpi),然后计算一个像素在该屏幕上等于多少毫米。

屏幕分辨率详情http://www.scantips.com/basics1a.html

不要假设没有校准或从某个来源获取显示器信息,您将获得规则并测量与您的绘图相同的毫米。

于 2013-08-02T17:59:17.337 回答
2

幸运的是,我发现有一些函数可以获取以像素和毫米为单位的屏幕大小。:wx.GetDisplaySize()wx.GetDisplaySizeMM(),我可以用它来计算每像素的毫米数mmperpx,进而可以用来将像素大小转换为毫米。

def px2mm(pixels):
    px = float(wx.GetDisplaySize()[1])
    mm = float(wx.GetDisplaySizeMM()[1])
    mmperpx = mm/px
    return mmperpx * pixels
于 2013-08-02T18:57:16.353 回答