Как получить разрешение экрана python
В этом уроке рассмотрим основные настройки окон, в которых располагаются виджеты. Обычные окна в Tkinter порождаются не только от класса Tk , но и Toplevel . От Tk принято создавать главное окно. Если создается многооконное приложение, то остальные окна создаются от Toplevel. Методы обоих классов схожи.
Размер и положение окна
По умолчанию окно приложения появляется в верхнем левом углу экрана. Его размер (ширина и высота) определяется совокупностью размеров расположенных в нем виджетов. В случае если окно пустое, то tkinter устанавливает его размер в 200 на 200 пикселей.
С помощью метода geometry можно изменить как размер окна, так и его положение. Метод принимает строку определенного формата.
Первые два числа в строке-аргументе geometry задают ширину и высоту окна. Вторая пара чисел обозначает смещение на экране по осям x и y . В примере окно размерностью 600 на 400 будет смещено от верхней левой точки экрана на 200 пикселей вправо и на 100 пикселей вниз.
Если перед обоими смещениями вместо плюса указывается минус, то расчет происходит от нижних правых углов экрана и окна. Так выражение root.geometry('600x400-0-0') заставит окно появиться в нижнем правом углу.
В аргументе метода geometry можно не указывать либо размер, либо смещение. Например, чтобы сместить окно, но не менять его размер, следует написать root.geometry('+200+100') .
Бывает удобно, чтобы окно появлялось в центре экрана. Методы winfo_screenwidth и winfo_screenheight возвращают количество пикселей экрана, на котором появляется окно. Рассмотрим, как поместить окно в центр, если размер окна известен:
Здесь мы вычитаем половину ширины и высоты окна (по 200 пикселей). Иначе в центре экрана окажется верхний левый угол окна, а не его середина.
Если размер окна неизвестен, то его можно получить с помощью того же метода geometry , но без аргументов. В этом случае метод возвращает строку, содержащую сведения о размерах и смещении, из которой можно извлечь ширину и высоту окна.
Метод update_idletasks позволяет перезагрузить данные об окне после размещения на нем виджетов. Иначе geometry вернет строку, где ширина и высота равняются по одному пикселю. Видимо таковы параметры на момент запуска приложения.
По умолчанию пользователь может разворачивать окно на весь экран, а также изменять его размер, раздвигая границы. Эти возможности можно отключить с помощью метода resizable . Так root.resizable(False, False) запретит изменение размеров главного окна как по горизонтали, так и вертикали. Развернуть на весь экран его также будет невозможно, при этом соответствующая кнопка разворота исчезает.
Заголовок окна
По умолчанию с стоке заголовка окна находится надпись "tk". Для установки собственного названия используется метод title .
Если необходимо, заголовок окна можно вообще убрать. В программе ниже второе окно ( Toplevel ) открывается при клике на кнопку, оно не имеет заголовка, так как к нему был применен метод overrideredirect с аргументом True . Через пять секунд данное окно закрывается методом destroy .
Практическая работа
Напишите программу, в которой на главном окне находятся холст и кнопка "Добавить фигуру". Кнопка открывает второе окно, включающее четыре поля для ввода координат и две радиокнопки для выбора, рисовать ли на холсте прямоугольник или овал. Здесь же находится кнопка "Нарисовать", при клике на которую соответствующая фигура добавляется на холст, а второе окно закрывается. Проверку корректности ввода в поля можно опустить.
Курс с примерами решений практических работ: android-приложение, pdf-версия.
Каков самый простой способ получить разрешение монитора (желательно в кортеже)?
Используете ли вы конкретный инструментарий пользовательского интерфейса? (например, GTK, wxPython, Tkinter и т. д.) С модулем Tkinter вы можете сделать это следующим образом . Он является частью стандартной библиотеки Python и работает на большинстве платформ Unix и Windows. Хороший обзор по различным методам для общих интерфейсов дан по этой ссылкетак что вам не нужно устанавливать пакет pywin32; ему не нужно ничего, что не связано с самим Python.
Для нескольких мониторов вы можете использовать GetSystemMetrics (78) и GetSystemMetrics (79)FYI Я создал модуль PyPI по этой причине:
Он поддерживает среды с несколькими мониторами. Его цель - быть кросс-платформой; на данный момент он поддерживает Cygwin и X11, но запросы на передачу полностью приветствуются.
Отлично работает на Windows, но Mac Я получаю следующую ошибку: ImportError: Не удалось загрузить X11 Отлично работает на Ubuntu. Проверено на Ubuntu 16.04. Удобный модуль (+1). Мне пришлось установить пару требований (например, pip install cython pyobjus ), прежде чем я смог использовать его в OSXЕсли вы используете wxWindows, вы можете просто:
Это лучший . у кого нет wx? :) плюс несколько строк вместо кучки кода на ваших глазах. Теперь это мой метод по умолчанию, спасибо. Это должно быть app = wx.App(False) иначе вы получите «объект wx.App должен быть создан первым». ошибка. 26 голосов а никто не проверял? Работает ли в Windows, не назначая экземпляр wx переменной?Взято непосредственно из ответа на этот пост: Как получить размер экрана в Tkinter?
Если у вас есть внешние дисплеи, расширенные до основного дисплея, этот метод даст сумму всех разрешений дисплея, а не текущего разрешения дисплея.В Windows 8.1 я не получаю правильное разрешение от ctypes или tk. У других людей такая же проблема для ctypes: getsystemmetrics возвращает неправильный размер экрана Чтобы получить правильное полное разрешение высокого монитора DPI на окнах 8.1, нужно вызвать SetProcessDPIAware и использовать следующий код:
Подробные сведения ниже:
В основном, вместо того, чтобы отображать контент с полным разрешением монитора, что сделало бы шрифты крошечными, содержимое масштабируется до тех пор, пока шрифты не станут достаточно большими.
На моем мониторе я получаю:
Физическое разрешение: 2560 x 1440 (220 DPI)
Сообщенное разрешение python: 1555 x 875 (158 DPI)
Я могу получить правильное полноэкранное разрешение и текущий DPI с приведенным ниже кодом. Обратите внимание, что я вызываю SetProcessDPIAware(), чтобы программа могла видеть реальное разрешение.
Я запускаю Windows 8.1 с монитором, поддерживающим 220 DPI. Мое масштабирование экрана устанавливает мой текущий DPI на 158.
Недавно я искал способы получения моего разрешения на экране Python, чтобы помочь диагностировать проблему с приложением, которое не вела себя правильно. В этой статье мы рассмотрим некоторые способы получения вашего разрешения экрана. Не все решения будут кроссплатформы, но я обязательно упомяну об этом, когда я обсудим эти методы. Давайте начнем!
Использование командной строки Linux
Есть несколько способов получить разрешение вашего экрана в Linux. Если вы выполните поиск Google, вы увидите людей, использующих различные наборы инструментов Python GUI. Я хотел найти способ получить разрешение экрана без установки третьего модуля. Я в конце концов нашел следующую команду:
Затем я должен был взять эту информацию и перевести ее в Python. Вот что я придумал:
Всякий раз, когда вам нужно использовать данные с Python, вам нужно будет создать два разных экземпляра подпроцесс. Это то, что я сделал выше. Я побудил вывод из xrandr на мой второй подпроцесс через его stdin. Затем я закрыл stdout первого процесса, чтобы в основном промыть все, что он вернулся ко второму процессу. Остальная часть кода просто разрабатывает ширину и высоту монитора.
Использование PYGTK
Это было довольно простым, так как PYGTK имеет те методы встроенные. Обратите внимание, что PYGTK доступен для Windows и Linux. Должен быть версия Mac в разработке.
Использование Wxpython
Как вы можете ожидать, WxPython Toolkit Также предоставляет метод получения вашего разрешения экрана. Это немного менее полезно для того, что вам действительно нужно создать объект приложения, прежде чем вы сможете получить разрешение, хотя.
Это все еще простой способ получить разрешение, которое вы ищете. Следует также отметить, что WXPYPHON проходит на всех трех основных платформах.
Использование TKinter
Библиотека TKinter обычно включена в Python, поэтому вы должны иметь этот быть по умолчанию. Он также предоставляет разрешение экрана, хотя требуется также создать объект «приложения»:
К счастью, Tkinter также доступен на всех 3 основных платформах, поэтому вы можете использовать этот метод в целом в любом месте.
Использование Pyside/Pyqt
Как вы, наверное догадались, вы также можете получить разрешение экрана, используя Писид и PYQT Отказ Вот версия Pyside:
Если вместо этого у вас есть PYQT4, то вы захотите изменить импорт в начале следующего:
Остальное одинаково. И, как вы, вероятно, знаете, оба этих библиотеки доступны в Windows, Linux и Mac.
Упаковка
На данный момент вы должны быть в состоянии получить разрешение экрана в любых ОС, которые вы включены. Существуют дополнительные методы получения этой информации, которая зависит от платформы. Например, в Windows вы можете использовать Win32API или CTYPE PYWIN32. На Mac есть appkit. Но перечисленные здесь методы Toolkit, будут работать на большинстве платформ просто отлично, и потому что они кроссплатформенные, вам не нужно использовать особые случаи для импорта определенных пакетов, чтобы сделать эту работу.
Есть ли приравниваемый бит кода к GetSystemMetrics в win32api для Ubuntu? Мне нужно получить ширину и высоту мониторов в пикселях.
На своем сайте я применяю таблицу стилей в зависимости от разрешения монитора зрителя. Используя screen.width в javascript, я делаю это. Но теперь у меня есть сомнения, что я могу использовать ту же технику, чтобы изменить весь контент сайта в зависимости от разрешения, то есть для более высоких.
Я столкнулся с довольно большой проблемой с разрешением в моем приложении WPF, которое будет использоваться в больнице s, клиент просит BIG шрифтов и элементов управления, чтобы они могли четко видеть данные на расстоянии. Проблема в том, что теперь, когда приложение работает в разрешении 800X600.
Я могу предложить несколько подходов, которые можно использовать. Однако я не использовал версию xlib.
1) xlib ( клиентская библиотека X для Python программ), если она доступна в вашей системе. Вы можете посмотреть на "Display" методы и свойства : python-xlib.sourceforge
2) На Ubuntu вы можете сделать следующее, чтобы получить разрешение экрана:
3) Вы можете использовать модуль subprocess python, чтобы выполнить приведенную выше команду и извлечь информацию
Дайте мне знать, если это было полезно для вас.
Я предполагаю, что вы-набор инструментов GUI. Почему еще вас интересуют размеры экрана?
Проверьте gtk.gdk.screen_width() и gtk.gdk.screen_height() из PyGTK. Что-то подобное должно быть доступно для QT.
Я использую python 3.5 на Ubuntu 16.04 LTS, и у меня была та же проблема. Я хотел решить эту проблему, не полагаясь на дополнительные модули, потому что они не установлены по умолчанию.
Поэтому я представил себе эту небольшую функцию, которая использует xrandr для получения данных.
Результат возвращается в виде словаря.
Мой друг недавно купил подержанный автомобиль с встроенным компьютером, и он подключен к сенсорному монитору на приборной панели (очень впечатляет!). Так вот, сегодня я помог ему установить Ubuntu на него, но мы не можем установить марку и модель подключенного сенсорного монитора, чтобы попытаться.
Я хочу определить разрешение монитора с помощью javascript . Это прекрасно работает с screen.height и screen.width на основном мониторе. На дополнительном мониторе (расширенном рабочем столе) это не работает! Когда я перемещаю браузер на дополнительный монитор и вызываю свою функцию javascript с.
получит разрешение экрана в виде кортежа, содержащего (ширина, высота)
Только что протестировал это с Python 3 - вы можете использовать модуль Xlib :
Если у вас не установлен модуль Xlib , запустите
Похожие вопросы:
Я пытаюсь создать систему рассеянного света с Python. Я получил pyscreenshot , чтобы правильно сохранить скриншот, но я не могу понять, как заставить его сделать снимок экрана моего второго монитора.
Я использую python и хочу создать полноэкранное окно. Я знаю о флаге pygame.FULLSCREEN, но когда я использую его, вокруг экрана появляются черные области. Есть ли какой-нибудь способ получить размер.
У меня есть два монитора разного размера, соединенные вместе с помощью (я полагаю) TwinView. Я пытался System.out.println(Toolkit.getDefaultToolkit().getScreenSize()); и получить.
На своем сайте я применяю таблицу стилей в зависимости от разрешения монитора зрителя. Используя screen.width в javascript, я делаю это. Но теперь у меня есть сомнения, что я могу использовать ту же.
Я столкнулся с довольно большой проблемой с разрешением в моем приложении WPF, которое будет использоваться в больнице s, клиент просит BIG шрифтов и элементов управления, чтобы они могли четко.
Мой друг недавно купил подержанный автомобиль с встроенным компьютером, и он подключен к сенсорному монитору на приборной панели (очень впечатляет!). Так вот, сегодня я помог ему установить Ubuntu.
Читайте также: