Найти - Пользователи
Полная версия: tkinter открытие дочерних окон
Начало » GUI » tkinter открытие дочерних окон
1
tiglon
Всем привет,
возможно ли открывать окна Toplevel() в рамках родительского окна Tk()? Как в Exel новые книги открываются как вкладки в основном окне.

Возможно вопрос глупый, но ничего конкретного в руководствах найти не могу.
4kpt
Непонятна цель такого открытия. Вы хотите сделать что-то вроде закладок или?
tiglon
Да, именно как вкладки. Грубо говоря есть центральное окно с выпадающими меню и при выборе открывалась соответсвущая вкладка, и данные в ней сохранялись после закрытия.
4kpt
Все понятно. Вам не нужны вкладки. Реализация следующая:

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

Если нужен пример - пишите :)
tiglon
Да, пример было бы замечательно
4kpt
Извините, что поздно. Раньше не мог. Ловите…
# -*- 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()
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