2014-09-29 32 views
0

如果我從控制檯加載我的pygame代碼,它正在讀取觸摸屏座標錯誤,但是如果我啓動到xwindows,它會正確讀取它們。Pygame.MOUSEBUTTONDOWN座標是關閉的,除非我在xwindows

我已經進入並校準了觸摸屏,如果我從控制檯運行evtest,我會得到正確的座標。它只是在python內返回觸摸的不正確座標。

有什麼我失蹤告訴python如何校準?

import sys, pygame 
pygame.init() 

black = 0, 0, 0 
size = width, height = 1280, 800 
screen = pygame.display.set_mode(size) 


while 1: 
     for event in pygame.event.get(): 
       if event.type == pygame.QUIT: sys.exit() 
       elif event.type == pygame.MOUSEBUTTONDOWN: 
         print(pygame.mouse.get_pos()) 
     screen.fill(black) 
+0

pygame.mouse.get_pos()給出了相對於pygame窗口的座標,你是否考慮到了這一點? – Chachmu 2014-09-29 13:52:51

+0

你能給出更多的信息,哪裏出問題了?也許是一個截圖,你按下的位置和它給你的座標? – KodyVanRy 2014-10-01 04:24:23

+0

我正在全屏模式下運行,我已經通過pygame.display.Info()驗證了該屏幕是pygame應用程序正在以我設置的完整1280x800分辨率運行。 – Buwrito 2014-10-06 02:32:46

回答

1

當不在X11下運行時,PyGame將利用視頻(幀緩衝)和鼠標/觸摸輸入(輸入事件)的SDL。使用觸摸屏(與傳統鼠標相反),除非您使用TSLIB,否則SDL通常會報告未校準和(可能?)未旋轉的座標。

確保您擁有所有必要的點點滴滴:

apt-get install tslib libts-bin 

現在告訴SDL通過設置一些環境變量來使用它,你開始你的Python腳本前:

export SDL_FBDEV=/dev/fb1 
export SDL_MOUSEDRV=TSLIB 
export SDL_MOUSEDEV=/dev/input/touchscreen 
./my_cool_program.py 

或者你可以在Python腳本中「本地」執行 - 這不會影響Python進程之外的環境變量:

import os 
os.environ["SDL_FBDEV"] = "/dev/fb1" 
os.environ["SDL_MOUSEDRV"] = "TSLIB" 
os.environ["SDL_MOUSEDEV"] = "/dev/input/touchscreen" 

這應該幾乎處理所有事情,包括[觸摸]屏幕方向。您應該注意檢查fbdev和系統輸入設備路徑的正確性。

如果你想提高觸摸屏的精度可以進行校準:

​​

...你也可以測試一下:

TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_test 

校準數據被保存到/etc/pointercal所以你不要重新啓動系統時不必重新校準。