Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从设备上下文';s GetSizeMM()_Python_Wxpython_Resolution_Dpi - Fatal编程技术网

Python 如何从设备上下文';s GetSizeMM()

Python 如何从设备上下文';s GetSizeMM(),python,wxpython,resolution,dpi,Python,Wxpython,Resolution,Dpi,我正在做一个项目,在这个项目中,我必须返回毫米或厘米或鼠标穿过的任何数字 哎呀,这有点棘手,因为每个屏幕都不一样 我找到了一个很好的函数:wx.DC.GetSizeMM(),它应该可以为我解决这个问题 我的希望增加了,但它给了我一些非常可疑的结果 在Windows下的我的电脑上: >>> app = wx.App() >>> dc = wx.ScreenDC() >>> dc.GetSize() # Get resolution in pix

我正在做一个项目,在这个项目中,我必须返回毫米或厘米或鼠标穿过的任何数字

哎呀,这有点棘手,因为每个屏幕都不一样

我找到了一个很好的函数:wx.DC.GetSizeMM(),它应该可以为我解决这个问题

我的希望增加了,但它给了我一些非常可疑的结果

在Windows下的我的电脑上:

>>> app = wx.App()
>>> dc = wx.ScreenDC()
>>> dc.GetSize() # Get resolution in pixels:
wx.Size(1680, 1050)
>>> dc.GetSizeMM() # Now this is completely off as these should be mm we're looking at:
wx.Size(432, 270)
>>>
我的屏幕至少比dc.GetSizeMM()认为的宽1厘米

对于:wx.MemoryDC(wx.EmptyBitmap(100100)).GetSizeMM()我得到wx.Size(25,25)。 我的意思是,拜托,完全荒谬

编辑:好的,也许不完全是这样D

很明显,纵横比很好,但使用什么因素来转换呢


我错过了什么?为什么它不工作?

“我得到wx.Size(25,25)”如果使用
dc.GetPPI()
我会冒险猜测它将返回96像素每英寸,因此25,25(1英寸乘1英寸)是正确的。虽然对于整个屏幕来说很明显,但是
dc
并没有受到某种程度的拉伸。使用
dc.SetUserScale(0.88,0.88)
可以得到非常接近屏幕实际大小的数字。虽然我不知道为什么会这样。你只是抢先给了我一些简短的评论并删除了这个问题,因为我意识到Windows正在干扰DPI缩放,我不想让人们感到困惑。我在这里发现了一些东西:假设wx.DC.GetSizeMM()即wx.GetDisplaySizeMM()基本上是对的,同时也是错的。取决于Windows正在执行的操作。现在我可能把大家弄得更糊涂了问题是XP上不存在ctypes.windell.user32.SetProcessDPIAware(),因此我无法检查如果我让进程DPI知道会发生什么。我认为,正如你所说的,“某种拉伸”与缩放有关。问题是,设置用户比例对我的机器没有任何影响。你是怎么得到0.88的比例因子的?凭经验?你是对的,我的dc.GetPPI()是96x96 DPI。你也是对的,432毫米接近我的屏幕宽度,但不准确。我的屏幕有点大。我想我会省去麻烦,让用户在做任何重要的事情之前先校准。否则,我将陷入缩放和重缩放(调整大小和缩放…)和返回值的正确性以及多屏幕环境问题的纠结中,然后我可能会在这一过程中犯一些不可原谅的错误,从而使我的产品适合垃圾。哦,是的,我有没有提到最后一切都应该是跨平台的?轻微的噩梦D