Окно по центру экрана

Как центрировать окно на экране в Tkinter?

Окно по центру экрана

Я пытаюсь центрировать окно tkinter. Я знаю, что могу программно получить размер окна и размер экрана и использовать его для установки геометрии, но мне интересно, есть ли более простой способ центрировать окно на экране.

вы можете попробовать использовать методы winfo_screenwidth и winfo_screenheight, которые возвращают соответственно ширину и высоту (в пикселах)Tk экземпляр (окно), и с некоторой базовой математикой вы можете центрировать свое окно:

import tkinter as tkfrom PyQt4 import QtGui # or PySide def center(toplevel): toplevel.update_idletasks() # Tkinter way to find the screen resolution # screen_width = toplevel.winfo_screenwidth() # screen_height = toplevel.winfo_screenheight() # PyQt way to find the screen resolution app = QtGui.QApplication([]) screen_width = app.desktop().screenGeometry().width() screen_height = app.desktop().screenGeometry().height() size = tuple(int(_) for _ in toplevel.geometry().split('+')[0].split('x')) x = screen_width/2 – size[0]/2 y = screen_height/2 – size[1]/2 toplevel.geometry(“+%d+%d” % (x, y)) toplevel.title(“Centered!”) if __name__ == '__main__': root = tk.Tk() root.title(“Not centered”) win = tk.Toplevel(root) center(win) root.mainloop()

Я призываю update_idletasks метод перед извлечением ширины и высоты окна, чтобы убедиться, что возвращаемые значения являются точными.

Tkinter не видит, есть ли 2 или более мониторов расширенной горизонтальной или вертикальный. Таким образом, вы получите общее разрешение всех экранов вместе, и ваше окно окажется где-то посередине экранов.

PyQt С другой стороны, также не видит среду с несколькими мониторами, но она получит только разрешение верхнего левого монитора (представьте себе 4 монитора, 2 вверх и 2 вниз, делая квадрат). Таким образом, он выполняет работу, помещая окно в центр этого экрана. Если вы не хотите использовать оба,PyQt и Tkinter, может быть, было бы лучше пойти с PyQt с самого начала.

общий подход к центрированию окна заключается в вычислении соответствующих координат экрана для верхнего левого пикселя окна:

x = (screen_width / 2) – (window_width / 2) y = (screen_height / 2) – (window_height / 2) , это не достаточно точно центрирование окна tkinter (по крайней мере, в Windows 7);
потому что ширина и высота окна возвращаются любой метод не будет включать самый внешний кадр, с заголовком и кнопками min/max/close.Он также не будет включать а меню (с файлом, редактировать и т. д.). К счастью!–31–>выход есть чтобы найти размеры этих.

вот самая основная функция, которая не учитывает вышеупомянутую проблему:

def center(win): win.update_idletasks() width = win.winfo_width() height = win.winfo_height() x = (win.winfo_screenwidth() // 2) – (width // 2) y = (win.winfo_screenheight() // 2) – (height // 2) win.geometry('{}x{}+{}+{}'.format(width, height, x, y))

варианты: winfo_reqwidth(), winfo_reqheight()

во-первых, и в первую очередь, мы хотим назвать окно update_idletasks() метод
непосредственно перед извлечением любой геометрии, чтобы обеспечить что возвращаемые значения точны.

важно понять геометрия строки используется элемент geometry() метод.
Первая половина-это ширина и высота окна кроме внешний каркас,
а вторая половина-это верхние левые координаты X и y внешней рамки.

существует четыре метода, которые позволят нам определить размеры внешней рамки.
winfo_rootx() даст нам верхняя левая координата окна x,кроме внешний каркас.
winfo_x() даст нам верхнюю левую координату X внешней рамки.
Их разница в ширине внешней рамы.

frm_width = win.winfo_rootx() – win.winfo_x()win_width = win.winfo_width() + (2*frm_width)

разницу между winfo_rooty() и winfo_y() будет высота нашего заголовка / меню-бара.

titlebar_height = win.winfo_rooty() – win.winfo_y()win_height = win.winfo_height() + (titlebar_height + frm_width)

вот полная функция, на пример:

import tkinter # Python 3 def center(win): “”” centers a tkinter window :param win: the root or Toplevel window to center “”” win.update_idletasks() width = win.winfo_width() frm_width = win.winfo_rootx() – win.winfo_x() win_width = width + 2 * frm_width height = win.winfo_height() titlebar_height = win.winfo_rooty() – win.winfo_y() win_height = height + titlebar_height + frm_width x = win.winfo_screenwidth() // 2 – win_width // 2 y = win.winfo_screenheight() // 2 – win_height // 2 win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) win.deiconify() if __name__ == '__main__': root = tkinter.Tk() root.attributes('-alpha', 0.0) menubar = tkinter.Menu(root) filemenu = tkinter.Menu(menubar, tearoff=0) filemenu.add_command(label=”Exit”, command=root.destroy) menubar.add_cascade(label=”File”, menu=filemenu) root.config(menu=menubar) frm = tkinter.Frame(root, bd=4, relief='raised') frm.pack(fill='x') lab = tkinter.Label(frm, text='Hello World!', bd=4, relief='sunken') lab.pack(ipadx=4, padx=4, ipady=4, pady=4, fill='both') center(root) root.attributes('-alpha', 1.0) root.mainloop()

один из способов предотвратить перемещение окна по экрану – использовать.attributes('-alpha', 0.0) сделать окно полностью прозрачным, а затем установить его в 1.0 после центрирования окна. Используя withdraw() или следовал по deiconify() кажется, не работает хорошо, для этой цели, на Windows 7. Обратите внимание, что я использую deiconify() как трюк для активации окна.

Tk предоставляет вспомогательную функцию, которая может сделать это как tk::PlaceWindow, но я не верю, что он был разоблачен как обернутый метод в Tkinter. Вы бы центрировать виджет, используя следующее:

from tkinter import * app = Tk()app.eval('tk::PlaceWindow %s center' % app.winfo_pathname(app.winfo_id()))app.mainloop()

эта функция должна иметь дело с несколькими дисплеями правильно, а также. Он также имеет опции для центра над другим виджетом или относительно указателя (используется для размещения всплывающих меню), так что они не падают с экрана.

Я нашел решение для того же вопроса на этом сайте

from tkinter import Tkfrom tkinter.ttk import Labelroot = Tk()Label(root, text=”Hello world”).pack() # Apparently a common hack to get the window size. Temporarily hide the# window to avoid update_idletasks() drawing the window in the wrong# position.root.withdraw()root.update_idletasks() # Update “requested size” from geometry manager x = (root.winfo_screenwidth() – root.winfo_reqwidth()) / 2y = (root.winfo_screenheight() – root.winfo_reqheight()) / 2root.geometry(“+%d+%d” % (x, y)) # This seems to draw the window frame immediately, so only call deiconify()# after setting correct window positionroot.deiconify()root.mainloop()

конечно, я изменил его соответственно своим целям, он работает.

Я использую опцию frame и expand. Очень просто. Мне нужны кнопки в центре экрана. Изменение размера окна и кнопка остаются в середине. Это мое решение.

frame = Frame(parent_window)Button(frame, text='button1', command=command_1).pack(fill=X)Button(frame, text='button2', command=command_2).pack(fill=X)Button(frame, text='button3', command=command_3).pack(fill=X)frame.pack(anchor=CENTER, expand=1)

использование:

import tkinter as tk if __name__ == '__main__': root = tk.Tk() root.title('Centered!') w = 800 h = 650 ws = root.winfo_screenwidth() hs = root.winfo_screenheight() x = (ws/2) – (w/2) y = (hs/2) – (h/2) root.geometry('%dx%d+%d+%d' % (w, h, x, y)) root.mainloop() # import tkinter as tk win = tk.Tk() # Creating instance of Tk classwin.title(“Centering windows”)win.resizable(False, False) # This code helps to disable windows from resizing window_height = 500window_width = 900 screen_width = win.winfo_screenwidth()screen_height = win.winfo_screenheight() x_cordinate = int((screen_width/2) – (window_width/2))y_cordinate = int((screen_height/2) – (window_height/2)) win.geometry(“{}x{}+{}+{}”.format(window_width, window_height, x_cordinate, y_cordinate)) win.mainloop()

Источник: https://askdev.ru/q/kak-centrirovat-okno-na-ekrane-v-tkinter-71258/

Как центрировать окно приложения в Windows 10

Окно по центру экрана

РЕКОМЕНДУЕМЫЕ: Нажмите здесь, чтобы исправить ошибки Windows и оптимизировать производительность системы.

Windows 10 обычно запоминает позиции приложений в целом, но с конфигурация с несколькими мониторами, это не так хорошо. Если вы отключили второй монитор, некоторые окна приложений часто продолжают открываться за пределами экрана.

Однако, если у вас есть приложение, которое просто не открывается на текущем экране или если оно имеет тенденцию открываться на нескольких экранах, вы можете использовать помощник по центрированию окна, чтобы быстро переместить его в центр текущего экрана.

Каскадные, составные или мозаичные окна на панели задач

Если вы щелкните правой кнопкой мыши на панели задач, вы увидите три варианта управления окнами – Каскадные окна, Показать окна с накоплением и Показать окна бок о бок. Вы также увидите параметр «Отменить», если щелкните правой кнопкой мыши на панели задач после выбора одного из этих параметров.

Параметр «Каскадирование окон» позволяет «каскадировать» открытые окна, чтобы вы могли видеть все строки заголовка сразу. Этот вариант не самый удобный.

Параметр «Показать окна с накоплением» немного интереснее, поскольку он позволяет размещать окна вертикально. Вероятно, это не идеально для типичных широкоэкранных дисплеев, но в некоторых ситуациях может быть полезно.

 Теперь мы рекомендуем использовать этот инструмент для вашей ошибки.

Кроме того, этот инструмент исправляет распространенные компьютерные ошибки, защищает вас от потери файлов, вредоносных программ, сбоев оборудования и оптимизирует ваш компьютер для максимальной производительности. Вы можете быстро исправить проблемы с вашим ПК и предотвратить появление других программ с этим программным обеспечением:

  • Шаг 1: Скачать PC Repair & Optimizer Tool (Windows 10, 8, 7, XP, Vista – Microsoft Gold Certified).
  • Шаг 2: Нажмите «Начать сканирование”, Чтобы найти проблемы реестра Windows, которые могут вызывать проблемы с ПК.
  • Шаг 3: Нажмите «Починить все», Чтобы исправить все проблемы.

Параметр «Мозаичные окна» еще лучше, потому что он позволяет автоматически размещать открытые окна рядом. Это похоже на Aero Snap, но позволяет автоматически располагать три или более окон рядом, что полезно для многозадачности на больших широкоформатных дисплеях.

Как в Windows 10 переместить окно, которого нет на экране?

Вариант 2
В Windows 10, 8, 7 и Vista нажмите и удерживайте клавишу «Shift», одновременно щелкая правой кнопкой мыши программу на панели задач, затем выберите «Переместить». В Windows XP щелкните правой кнопкой мыши элемент панели задач и выберите «Переместить». С помощью мыши или клавиш со стрелками на клавиатуре верните окно на экран.

Регулируйте частоту дисплея, пока дисплей не будет центрирован.

Нажмите «Пуск» и введите «Настроить разрешение экрана» (без кавычек); щелкните ссылку «Настроить разрешение экрана», когда она появится в списке. Появится окно «Разрешение экрана»; щелкните ссылку «Дополнительные настройки».

Aero snap для боковых окон

Благодаря функции «Снимок» одно окно занимает половину экрана, что позволяет легко размещать два окна рядом без необходимости изменять их размеры и перемещать вручную. Чтобы использовать Aero Snap, удерживайте клавишу Windows и нажмите клавишу со стрелкой влево или вправо. Текущее окно изменяется и помещается в левую или правую часть экрана.

Вы также можете нажать и удерживать строку заголовка окна и перетащить строку заголовка окна в левую или правую часть экрана. Вы увидите предварительный просмотр того, как будет выглядеть окно. Перетащите окно к краю экрана, и оно автоматически изменит размер по размеру экрана.

https://answers.microsoft.com/en-us/windows/forum/all/how-do-i-center-a-window-on-my-computers-display/84f04abb-5cbc-4ec2-bfa6-d96a529a1e3b

РЕКОМЕНДУЕМЫЕ: Нажмите здесь, чтобы устранить ошибки Windows и оптимизировать производительность системы

CCNA, веб-разработчик, ПК для устранения неполадок

Я компьютерный энтузиаст и практикующий ИТ-специалист. У меня за плечами многолетний опыт работы в области компьютерного программирования, устранения неисправностей и ремонта оборудования. Я специализируюсь на веб-разработке и дизайне баз данных. У меня также есть сертификат CCNA для проектирования сетей и устранения неполадок.

Источник: http://windowsbulletin.com/ru/%D0%BA%D0%B0%D0%BA-%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D0%BE%D0%BA%D0%BD%D0%BE-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BD%D0%B0-windows-10/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.