2016-04-03 1 views
1

J'utilise un écran 4k (3840x2160).tkinter ne reconnaît pas la résolution d'écran correctement

from tkinter import * 

root = Tk() 

width = root.winfo_screenwidth() 
height = root.winfo_screenheight() 

print (width, height) 

mainloop() 

Quand je lance ce code, la sortie est 1536 par 864

Quelqu'un pourrait-il expliquer pourquoi cela se passe, et comment je peux le réparer, Merci.

+0

Cela semble se produire [ici] (http://stackoverflow.com/questions/17129144/tk-winfo-returns-wrong-screensize-python-2-7-5-on-windows-8) aussi. Je ne comprends pas pourquoi (fonctionne bien sur ma machine). – TigerhawkT3

+0

Est-ce que c'est sous Windows? Il peut s'agir d'un indicateur sensible au DPI qui signifie que Tk est mis à l'échelle. – patthoyts

+0

Oui c'est sur Windows 10 64 bits. Je crois que le DPI par défaut pour Tkinter est 72, mon écran étant de 15,6 pouces aurait 282 DPI. –

Répondre

0

J'ai couru votre code sur mon Raspberry pi, et ai obtenu la valeur correcte pour mon affichage (qui n'est pas un affichage 4K).

Je n'ai pas la solution, mais je constate que le rapport entre vos réponses attendues/observées sont

3840/1536 = 2.5 
2160/864 = 2.5 

Peut-être que le pilote d'écran pour un affichage 4K fait une différence entre les pixels physiques réels (3840x2160) et un concept de "pixels logiques". Le but serait d'éviter que certains logiciels affichent, par exemple, un texte en 8 points avec 8 pixels physiques réels, car cela serait illisible.

Je ne peux pas tester cela (je n'ai pas le matériel), ce n'est qu'une hypothèse. Je n'ai peut-être pas la terminologie exacte.

(BTW, sur iOS, il y a les concepts de points vs pixels - vous pouvez rechercher ces termes, même si cela ne répond pas à votre problème, il peut s'agir d'un problème similaire).