Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Tkinter смещения окна при первом запуске [RSS Feed]

#1 Март 7, 2013 12:39:17

malya
От:
Зарегистрирован: 2012-01-11
Сообщения: 49
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter смещения окна при первом запуске

Есть простой код:

#!/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.
Спасибо!



Офлайн

#2 Март 7, 2013 16:59:04

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter смещения окна при первом запуске

Проверить не могу, так как сейчас сижу на ХР, но можно попробовать поменять строку

 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”. Надеюсь это то, что Вы ищите :)



Отредактировано 4kpt (Март 7, 2013 17:14:58)

Офлайн

#3 Март 7, 2013 19:04:17

malya
От:
Зарегистрирован: 2012-01-11
Сообщения: 49
Репутация: +  1  -
Профиль   Отправить e-mail  

Tkinter смещения окна при первом запуске

Да спасибо за ответ!
Я уже тоже нашел

self.master.geometry()
оно возвращает именно такую геометрию какую я задал при запуске, а вот что возвращает winfo_geometry() непонятно, вместо 100x100+100+100 возвращает 100x100+101+120.

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

P.S. кстати, а где-то есть полный справочник (Referencу) по всем классам,методам,переменым Tkinter?



Отредактировано malya (Март 7, 2013 19:05:08)

Офлайн

#4 Март 7, 2013 21:44:26

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Tkinter смещения окна при первом запуске

Офлайн

#5 Март 7, 2013 21:46:17

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

Tkinter смещения окна при первом запуске

А остальное выискивать в коде, гугле, в документации по tcl/tk, в доках по другим языкам и tk.



Офлайн

#6 Март 8, 2013 00:05:47

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter смещения окна при первом запуске

malya
Недавно был пост в разделе “для новичков”. Так вот там была проблема именно с использованием метода .quit() вместо метода .destroy(). В документации написано в чем разница :)



Офлайн

  • Начало
  • » GUI
  • » Tkinter смещения окна при первом запуске[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version