Python 腳本中不同平臺(tái)顯示器分辨率的坐標(biāo)轉(zhuǎn)換
顯示器坐標(biāo)系統(tǒng):

腳本示例:
>>> import pyautogui
>>> pyautogui.size()? ? #獲取屏幕分辨率
(1920, 1080)
>>> pyautogui.position()? #獲取當(dāng)前鼠標(biāo)坐標(biāo)
(187, 567)
假設(shè)屏幕分辨率為1024x768,那么1920x1080分辨率下的(187, 567)坐標(biāo)轉(zhuǎn)換為:
X=187*1024/1920
Y=567*768/1080
總結(jié)為:
假設(shè)A分辨率下坐標(biāo)是XA*YA, 那么XB*YB分辨率下的(xb,yb)坐標(biāo)轉(zhuǎn)換為:
xa=xb*XA/XB
ya=yb*YA/YB
基于以上換算,若:
python腳本中有若干個(gè)基于A分辨率下的坐標(biāo)值(AX1,AY1),(AX2,AY2),(AX3,AY3)...,如何整體換算為B分辨率下的坐標(biāo)值(BX1,BY1),(BX2,BY2),(BX3,BY3)...?
測(cè)試腳本(1920,1080):
import pyautogui
Pyautogui.click(1000,500)? ? ? ? #原始腳本中的坐標(biāo)值
Pyautogui.moveTo(100,50)
Pyautogui.doubleClick(800,600)
保存為coords.txt文本,放入f盤(pán)根目錄,做為待處理文本。
坐標(biāo)轉(zhuǎn)換代碼:
import re
X1,Y1 = 1920,1080? ? ? #修改為編寫(xiě)和調(diào)試原始腳本的顯示器系統(tǒng)的分辨率的值
X2,Y2 = 1024,768? ? ? ? #后續(xù)移植到其他平臺(tái)時(shí)的顯示器系統(tǒng)的分辨率的值
f = open('f:\coords.txt').readlines()
s = "transfer coords:"
with open('f:\coords.txt','a') as h:
? ? ? ? ? h.write('\n'*2+ s + '\n'*2)
for i in f:
? ? ? ? ? a1 = i.find('(')
? ? ? ? ? b1 = i.find(',')
? ? ? ? ? ? c1 = i.find(')')
? ? ? ? ? ? x1 = i[(a1+1):b1]
? ? ? ? ? ? y1 = i[(b1+1):c1]
? ? ? ? ? ? if bool(re.search(r'\d',i)):? ? ? ? ? #篩選出包含數(shù)字的行
? ? ? ? ? ? ? ? ? ? ? ? x = int(x1)*X2/X1
? ? ? ? ? ? ? ? ? ? ? ? y = int(y1)*Y2/Y1
? ? ? ? ? ? ? ? ? ? ? ? ? j = i.replace(x1,str(int(x)))
? ? ? ? ? ? ? ? ? ? ? ? ? k = j.replace(y1,str(int(y)))
? ? ? ? ? ? ? ? ? ? ? ? ? print (k)
? ? ? ? ? ? ? ? ? ? ? ? ? with open('f:\coords.txt','a') as h:? ? ? ? #追加寫(xiě)入文本
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? h.write(k)
轉(zhuǎn)換完成的文本內(nèi)容:
import pyautogui
Pyautogui.click(1000,500)? ? ? ? ? ? #原始腳本中的坐標(biāo)值
Pyautogui.moveTo(100,50)
Pyautogui.doubleClick(800,600)
transfer coords:
Pyautogui.click(533,355)? ? ? ? ? ? ? ? ? #移植到其他平臺(tái)時(shí)的坐標(biāo)值
Pyautogui.moveTo(53,35)
Pyautogui.doubleClick(426,426)
至此,實(shí)現(xiàn)了不同平臺(tái)顯示分辨率的坐標(biāo)值轉(zhuǎn)換,可以在后續(xù)的編程中方便地使用。首次發(fā)文,簡(jiǎn)書(shū)的編輯還不太習(xí)慣,程序輸入時(shí)注意行的格式。
---本文結(jié)束,歡迎拍磚---