Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 23, 2013 20:42:24

tiglon
Зарегистрирован: 2013-01-23
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter открытие дочерних окон

Всем привет,
возможно ли открывать окна Toplevel() в рамках родительского окна Tk()? Как в Exel новые книги открываются как вкладки в основном окне.

Возможно вопрос глупый, но ничего конкретного в руководствах найти не могу.

Офлайн

#2 Янв. 23, 2013 21:11:10

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

tkinter открытие дочерних окон

Непонятна цель такого открытия. Вы хотите сделать что-то вроде закладок или?



Офлайн

#3 Янв. 23, 2013 21:55:31

tiglon
Зарегистрирован: 2013-01-23
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter открытие дочерних окон

Да, именно как вкладки. Грубо говоря есть центральное окно с выпадающими меню и при выборе открывалась соответсвущая вкладка, и данные в ней сохранялись после закрытия.

Офлайн

#4 Янв. 23, 2013 23:15:22

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

tkinter открытие дочерних окон

Все понятно. Вам не нужны вкладки. Реализация следующая:

1. Делаете простое корневое окно.
2. Делаете строку меню (но строка меню в Tkinter обладает спецификой - не забывайте).
3. Вешаете на каждую строку меню комманду, которая строит:
а) Рамку на весь экран (рамка - размер экрана без меню).
б) Размещаете в рамке все Вам нужные объекты (кнопки, полсы прокрутки, поля ввода и т.п.).
в) Если было выбрано следующее окно (следующее поле меню), то прячете рамку со всеи виджетами
метдом (.метод_упаоквки_forget()) - пример - .pack_forget()
г) Строите новую рамку с новыми виджетами…

Если нужен пример - пишите :)



Отредактировано 4kpt (Янв. 23, 2013 23:22:35)

Офлайн

#5 Янв. 24, 2013 06:19:02

tiglon
Зарегистрирован: 2013-01-23
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter открытие дочерних окон

Да, пример было бы замечательно

Офлайн

#6 Янв. 24, 2013 21:40:37

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

tkinter открытие дочерних окон

Извините, что поздно. Раньше не мог. Ловите…

# -*- coding:utf-8 -*-
import Tkinter
def clear():
    # Удаление предыдущего окна, чтобы окна не наслаивались одно на другое
    if frm.winfo_children():
        frm.winfo_children()[0].destroy()
def gotomenu1():
    u"""Построение кнопки первого меню"""
    clear()
    btn = Tkinter.Button(frm, text=u"Кнопка первого меню", width=30)
    btn.place(relx=0.5, rely=0.5, anchor="center")
def gotomenu2():
    u"""Построение кнопки второго меню"""
    clear()
    btn = Tkinter.Button(frm, text=u"Кнопка второго меню", width=30)
    btn.place(relx=0.5, rely=0.5, anchor="center")
root = Tkinter.Tk()
root.geometry("400x400+100+100")
MB = Tkinter.Menu(root)
MN = Tkinter.Menu(MB)
MN.add_command(label=u"Первое окно", command=gotomenu1)
MN.add_command(label=u"Второе окно", command=gotomenu2)
MB.add_cascade(label=u"Выбор окна", menu=MN)
root.config(menu=MB)
frm = Tkinter.Frame(root, width=400, height=400, bg="red")
frm.pack()
root.focus_force()
root.mainloop()



Отредактировано 4kpt (Янв. 24, 2013 21:55:01)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version