Найти - Пользователи
Полная версия: Tkinter смещения окна при первом запуске
Начало » GUI » Tkinter смещения окна при первом запуске
1
malya
Есть простой код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Tkinter as tk
class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()
        self.createWidgets()
        self.master.geometry("100x100+100+100")
    def createWidgets(self):
        self.quitButton = tk.Button(self, text="Quit", command=self.quit)
        self.quitButton.grid()
    def quit(self):
        print("quit")
        print(self.master.winfo_geometry())
        tk.Frame(self).quit()
app = Application()
app.master.title("Simple application")
app.mainloop()

В конструкторе я задаю парметры (размер и положение) для главного окна. При выходе я их проверяю - вывожу в консоль.
Так вот под Виндой geometry остается такой же как и вконструкторе, а под Линуксом (Опенбокс) - координата y смещается на 20 пикселей вниз.

Как это можно побороть? Нужно окно которое если его закрыли при определенном размере и в определенной позиции, при следующем запуске появилось с такой же geometry.
Спасибо!
4kpt
Проверить не могу, так как сейчас сижу на ХР, но можно попробовать поменять строку
 print(self.master.winfo_geometry())
На строку
 print(self.master.geometry())
Мне такое поведение кажется странным…

P.S. Еще замените строку
tk.Frame(self).quit()
На строку
self.master.destroy()
P.S.S. Кроме того, есть такое понятие, как миниальная длина окна по оси Х.
Меньше окно вывести не получится (может и получится, но я не знаю как :) ).
Возможно Вы столкнулись именно с этим случаем. Рекомендую попробовать другие, большие размеры. Например “200x200+100+100”.
Для примера. У меня ХР на моем мониторе не хочет выводить окно размером меньше чем 111 пикселей по длине, т.е. по оси Х. Если задаешь геометрию меньше чем “111xЛюбое+Любое+Любое” то на экран окно выводится, но размеры его равны “111xЛюбое+Любое+Любое”, т.е. если задается “50x100+100+100”, то все равно на экране получаем “111x50+100+100”. Надеюсь это то, что Вы ищите :)
malya
Да спасибо за ответ!
Я уже тоже нашел
self.master.geometry()
оно возвращает именно такую геометрию какую я задал при запуске, а вот что возвращает winfo_geometry() непонятно, вместо 100x100+100+100 возвращает 100x100+101+120.

И еще, что плохого в quit(), чем лучше destroy() и какая разница, я же взял пример из книги.

P.S. кстати, а где-то есть полный справочник (Referencу) по всем классам,методам,переменым Tkinter?
Griffon
Tkinter 8.5 reference: a GUI for Python
Griffon
А остальное выискивать в коде, гугле, в документации по tcl/tk, в доках по другим языкам и tk.
4kpt
malya
Недавно был пост в разделе “для новичков”. Так вот там была проблема именно с использованием метода .quit() вместо метода .destroy(). В документации написано в чем разница :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB