2016-02-07 2 views
1

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

Мой код:

from tkinter import * 

class Main: 
    def __init__(self, master): 
     self.master = master 
     self.win_1() 

    def win_1(self): 
     for child in self.master.winfo_children(): 
      child.destroy() 
     Text(self.master, width = 10, height = 3).grid(columnspan = 2) 
     Button(self.master, text = 'Win 2', width = 7, command = self.win_2).grid(row = 2, column = 0) 
     Button(self.master, text = 'Exit', width = 7, command = self.master.destroy).grid(row = 2, column = 1)  
     self.position_win() 

    def win_2(self): 
     for child in self.master.winfo_children(): 
      child.destroy() 
     Text(self.master, width = 20, height = 10).grid() 
     Button(self.master, text = 'Win 1', command = self.win_1).grid() 
     self.position_win() 

    def position_win(self): 
     self.h = self.master.winfo_height() 
     self.w = self.master.winfo_width() 
     self.master.geometry('-%d+%d' % (self.w, self.h)) 


root = Tk() 
Main(root) 

root.mainloop() 

Это было лучшее, что я мог придумать, чтобы достичь своей цели. Когда я запускаю это, окно начинает отлично размещаться в верхнем правом углу. Когда вы нажимаете кнопку, верхний правый угол окна 2 устанавливается в левом нижнем углу окна 1. Затем, когда вы нажимаете на окно 1, он устанавливает верхний правый угол в ту же позицию, что и в окне 2. С этого момента цикл между окнами работает в правом верхнем углу окна, но окна не находятся в верхнем правом углу экрана. Я уверен, что это ясно, как грязь, но если вы запустите код, вы увидите, о чем я говорю.

Почему он это делает и как его исправить?

Спасибо!

ответ

0

Ваша программа делает именно то, что вы говорите. Цитата из http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/geometry.html «Если следующая часть имеет форму + x, она указывает, что левая сторона окна должна быть x пикселей с левой стороны рабочего стола. Если у нее есть форма -x, правая сторона окна это x пикселей с правой стороны рабочего стола. "

Итак, вы говорите tk, чтобы опустить окно ширины предыдущего окна от правого края. Аналогично для вертикального положения. Единственная «тайна» - это то, почему она в углу в первый раз. Причина в том, что self.master.geometry() изначально 1x1+0+0 и не зависит от операций сетки. Если вы хотите, чтобы окно находилось в постоянном месте, поместите его там, где вы хотите, в метод __init__ с self.master.geometry('-0+0') и удалите способ и вызовы.

Примечание: альтернативный подход к созданию и уничтожению виджетов заключается в создании двух кадров и переключении на grid_forget ing и grid с другим. Или сетку и поднимите ту, которую вы хотите сверху. Последнее делает окно достаточно большим, чтобы удерживать оба.

+0

Хорошая информация. Спасибо! И проблема решена. Что касается ваших комментариев в вашей заметке, я действительно прочитал этот подход, но с моими ограниченными знаниями метод create/destroy дал больше смысла. Но я буду рассматривать этот подход в своем следующем проекте. Еще раз спасибо! – Gregory6106

Смежные вопросы