Qual é a maneira mais simples de obter a resolução do monitor (de preferência em uma tupla)?
python
screen
resolution
rectangletangle
fonte
fonte
Tkinter
módulo, você pode fazer desta maneira . Faz parte da biblioteca padrão do Python e funciona na maioria das plataformas Unix e Windows.Respostas:
No Windows:
Se você estiver trabalhando com uma tela de alta resolução, verifique se o seu interpretador python é HIGHDPIAWARE.
Com base neste post.
fonte
highdpiaware
? Isso seria útil para incluir na resposta.No Windows, você também pode usar ctypes com
GetSystemMetrics()
:para que você não precise instalar o pacote pywin32; não precisa de nada que não seja fornecido com o próprio Python.
Para configurações de vários monitores, você pode recuperar a largura e a altura combinadas do monitor virtual:
fonte
GetSystemMetrics(78)
eGetSystemMetrics(79)
retorna?Eu criei um módulo PyPI por esse motivo:
O código:
Resultado:
Ele suporta ambientes com vários monitores . Seu objetivo é ser multiplataforma; por enquanto, suporta Cygwin e X11, mas solicitações pull são totalmente bem-vindas.
fonte
pip install cython pyobjus
) antes que eu pudesse usá-lo em OSX emboraSe você estiver usando o wxWindows, poderá simplesmente:
fonte
app = wx.App(False)
de outra forma de obter o "objeto wx.App deve ser criado em primeiro lugar." erro. 26 votos e ninguém verificou? Funciona no Windows sem atribuir a instância wx a uma variável?Retirado diretamente de uma resposta a este post: Como obter o tamanho da tela no Tkinter?
fonte
No Windows 8.1, não estou obtendo a resolução correta de ctypes ou tk. Outras pessoas estão tendo o mesmo problema para ctypes: getsystemmetrics retorna tamanho de tela errado Para obter a resolução completa correta de um monitor de alto DPI no Windows 8.1, é necessário chamar SetProcessDPIAware e usar o seguinte código:
Detalhes completos abaixo:
Eu descobri que isso ocorre porque o Windows está relatando uma resolução em escala. Parece que o python é, por padrão, um aplicativo 'sistema dpi consciente'. Os tipos de aplicativos compatíveis com DPI estão listados aqui: http://msdn.microsoft.com/en-us/library/windows/desktop/dn469266%28v=vs.85%29.aspx#dpi_and_the_desktop_scaling_factor
Basicamente, em vez de exibir o conteúdo com a resolução completa do monitor, o que tornaria as fontes pequenas, o conteúdo é ampliado até que as fontes sejam grandes o suficiente.
No meu monitor, recebo:
Resolução física: 2560 x 1440 (220 DPI)
Resolução de python relatada: 1555 x 875 (158 DPI)
Por este site do Windows: http://msdn.microsoft.com/en-us/library/aa770067%28v=vs.85%29.aspx A fórmula para a resolução efetiva do sistema relatada é: (reports_px * current_dpi) / (96 dpi ) = Physical_px
Consigo obter a resolução de tela cheia correta e o DPI atual com o código abaixo. Observe que eu chamo SetProcessDPIAware () para permitir que o programa veja a resolução real.
O que retornou:
Estou executando o Windows 8.1 com um monitor capaz de 220 DPI. Meu dimensionamento de exibição define meu DPI atual para 158.
Usarei o 158 para garantir que meus gráficos matplotlib tenham o tamanho certo com: from pylab import rcParams rcParams ['figure.dpi'] = curr_dpi
fonte
Tkinter
está usando pixels corretos, mas não está ciente da escala de dpi, relatando tamanhos de mm incorretos.ctypes.windll.shcore.SetProcessDpiAwareness(2)
retorna erroOSError: [WinError 126] The specified module could not be found
.E para completar, o Mac OS X
fornecerá uma lista de tuplas contendo todos os tamanhos de tela (se houver vários monitores)
fonte
Se você estiver usando o
Qt
kit de ferramentas especificamentePySide
, poderá fazer o seguinte:fonte
Usando o Linux, a maneira mais simples é executar o comando bash
e analise sua saída usando regexp.
Além disso, você pode fazer isso através do PyGame: http://www.daniweb.com/forums/thread54881.html
fonte
Aqui está um pequeno programa Python rápido que exibirá as informações sobre a configuração de vários monitores:
Aqui está um exemplo de sua saída:
fonte
gtk.Window()
ogdk_default_root_window
? É assim que você tem certeza de que.get_screen
contém todos os monitores?gtk.Window()
faz é criar uma nova janela (veja aqui ). A janela é apenas uma maneira de usarget_screen
para obter as informações do monitor. Retorna a tela em que a janela está (ou estaria, se alguma vez fosse exibida). Eu acho que depende da configuração do X se essa "tela" contém todos os "monitores". Isso acontece no meu sistema com o Twinview.Estou usando o método get_screen_resolution em um dos meus projetos, como o abaixo, que é basicamente uma cadeia de importação. Você pode modificar isso de acordo com Suas necessidades, removendo as peças que não são necessárias e movendo as portas mais prováveis para cima na cadeia.
fonte
Pergunta antiga, mas isso está faltando. Eu sou novo em python, então, me diga se esta é uma solução "ruim". Esta solução é suportada apenas para Windows e MacOS e funciona apenas na tela principal - mas o sistema operacional não é mencionado na pergunta.
Meça o tamanho fazendo uma captura de tela. Como o tamanho da tela não deve mudar, isso deve ser feito apenas uma vez. Existem soluções mais elegantes se você tiver um kit de ferramentas GUI como GTK, wx, ... instalado.
veja travesseiro
fonte
Versão do XWindows:
fonte
Expandindo a resposta de @ user2366975 , para obter o tamanho atual da tela em uma configuração de várias telas usando Tkinter (código em Python 2/3):
(Deve funcionar em várias plataformas, testado apenas no Linux)
fonte
Tente o seguinte código:
fonte
Caso você tenha o PyQt4 instalado, tente o seguinte código:
Para o PyQt5, o seguinte funcionará:
fonte
Uma plataforma cruzada e uma maneira fácil de fazer isso é usar o TKinter, que vem com quase todas as versões do python, para que você não precise instalar nada:
fonte
Usando Linux Em vez de regexp, pegue a primeira linha e retire os valores de resolução atuais.
Resolução atual da tela: 0
Isso foi feito no xrandr 1.3.5, não sei se a saída é diferente em outras versões, mas isso deve facilitar a compreensão.
fonte
Para obter bits por pixel:
parâmetros no gdi32:
fonte
Tente pyautogui:
fonte
Outra versão usando
xrandr
:fonte
Usando pygame :
[1]
No entanto, se você estiver tentando definir sua janela para o tamanho da tela, faça o seguinte:
para definir sua exibição no modo de tela cheia. [2]
fonte
Você poderia usar o PyMouse . Para obter o tamanho da tela, use o
screen_size()
atributo:a
retornará uma tupla,,(X, Y)
ondeX
está a posição horizontal eY
a posição vertical.Link para funcionar na documentação.
fonte
Se você estiver trabalhando no sistema operacional Windows, poderá usar o módulo OS para obtê-lo:
Ele retornará uma tupla (Y, X) onde Y é o tamanho vertical e X é o tamanho horizontal. Este código funciona em Python 2 e Python 3
fonte
No Linux, podemos usar o módulo de subprocesso
fonte
É um pouco problemático para a tela da retina, eu uso o tkinter para obter o tamanho falso, use o pilllow grab para obter o tamanho real:
fonte
Para versões posteriores do PyGtk:
fonte
Para Linux, você pode usar isto:
fonte
Script de utilitário usando a
pynput
biblioteca. Publicando aqui para ref .:fonte