Python 腳本中不同平臺顯示器分辨率的坐標轉(zhuǎn)換
顯示器坐標系統(tǒng):
腳本示例:
>>> import pyautogui
>>> pyautogui.size()? ? #獲取屏幕分辨率
(1920, 1080)
>>> pyautogui.position()? #獲取當前鼠標坐標
(187, 567)
假設屏幕分辨率為1024x768雕憔,那么1920x1080分辨率下的(187, 567)坐標轉(zhuǎn)換為:
X=187*1024/1920
Y=567*768/1080
總結(jié)為:
假設A分辨率下坐標是XA*YA, 那么XB*YB分辨率下的(xb,yb)坐標轉(zhuǎn)換為:
xa=xb*XA/XB
ya=yb*YA/YB
基于以上換算,若:
python腳本中有若干個基于A分辨率下的坐標值(AX1,AY1),(AX2,AY2),(AX3,AY3)...稽荧,如何整體換算為B分辨率下的坐標值(BX1,BY1),(BX2,BY2),(BX3,BY3)...?
測試腳本(1920,1080):
import pyautogui
Pyautogui.click(1000,500)? ? ? ? #原始腳本中的坐標值
Pyautogui.moveTo(100,50)
Pyautogui.doubleClick(800,600)
保存為coords.txt文本橘茉,放入f盤根目錄,做為待處理文本姨丈。
坐標轉(zhuǎn)換代碼:
import re
X1,Y1 = 1920,1080? ? ? #修改為編寫和調(diào)試原始腳本的顯示器系統(tǒng)的分辨率的值
X2,Y2 = 1024,768? ? ? ? #后續(xù)移植到其他平臺時的顯示器系統(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:? ? ? ? #追加寫入文本
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? h.write(k)
轉(zhuǎn)換完成的文本內(nèi)容:
import pyautogui
Pyautogui.click(1000,500)? ? ? ? ? ? #原始腳本中的坐標值
Pyautogui.moveTo(100,50)
Pyautogui.doubleClick(800,600)
transfer coords:
Pyautogui.click(533,355)? ? ? ? ? ? ? ? ? #移植到其他平臺時的坐標值
Pyautogui.moveTo(53,35)
Pyautogui.doubleClick(426,426)
至此畅卓,實現(xiàn)了不同平臺顯示分辨率的坐標值轉(zhuǎn)換,可以在后續(xù)的編程中方便地使用蟋恬。首次發(fā)文翁潘,簡書的編輯還不太習慣,程序輸入時注意行的格式歼争。
---本文結(jié)束拜马,歡迎拍磚---