Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 20, 2013 10:55:51

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

ttk notebook

Добрый день.
Хочу сделать переключение закладками в окнах (примерно как в книге excel).
Вот тут есть описание виджета notebook из ttk.
http://docs.python.org/2/library/ttk.html#ttk-notebook
Но в рунете нет ни одного примера использования. Помогите пожалуйста.



Офлайн

#2 Фев. 20, 2013 11:07:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

ttk notebook

Примеров масса

ttk.notebook example



Офлайн

#3 Фев. 20, 2013 13:11:08

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

ttk notebook

Да спасибо, вроде есть. Но появилась новая проблема с импортом.

from tkinter import *
from tkinter import ttk
import tkinter
import tkinter.ttk
import tkinter as tk
import tkinter.ttk as ttk
Пишу одно, ошибка, меняю импорт, все ок.
Пишу дальше, снова ошибка, меняю импорт, ошибки нет, старая возвращается.
По началу это было весело, но дальше, все больше вымораживает.



Офлайн

#4 Фев. 20, 2013 13:24:05

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

ttk notebook

Что Вы делаете?
Зачем Вы импортируете уже импортированные модули?
Я же Вам написал, что скорее всего, ttk не является частью tkinter, посему его импортировать нужно отдельно.
Приведите больше кода. Ничего же не понятно.



Офлайн

#5 Фев. 20, 2013 13:26:15

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

ttk notebook

Вот пример работы со вкладками. Только Вам нужно поменять Tkinter на tkinter…
http://www.python.su/forum/topic/20690/



Отредактировано 4kpt (Фев. 20, 2013 13:26:31)

Офлайн

#6 Фев. 20, 2013 13:33:54

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

ttk notebook

Вот пример

import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
# use width x height + x_offset + y_offset (no spaces!)
root.geometry("%dx%d+%d+%d" % (300, 200, 100, 50))
root.title('test the ttk.Notebook')
nb = ttk.Notebook(root)
nb.pack(fill='both', expand='yes')
# create a child frame for each page
f1 = tk.Frame(bg='red')
f2 = tk.Frame(bg='blue')
f3 = tk.Frame(bg='green')
# create the pages
nb.add(f1, text='page1')
nb.add(f2, text='page2')
nb.add(f3, text='page3')
# put a button widget on child frame f1 on page1
btn1 = tk.Button(f1, text='button1')
btn1.pack(side='left', anchor='nw', padx=3, pady=5)
root.mainloop()

У меня это не работает пока с импортом не разберусь.
# -*- coding: utf-8 -*-
from tkinter import *
import tkinter.ttk
mainframe = tkinter.Tk()
# use width x height + x_offset + y_offset (no spaces!)
mainframe.minsize(800,500)
mainframe_x = 800
mainframe_y = 500
mainframe_width = (mainframe.winfo_screenwidth() / 2 - mainframe_x / 2)
mainframe_heigth = (mainframe.winfo_screenheight() / 2 - mainframe_y / 2)
mainframe.geometry("%dx%d+%d+%d" % (mainframe_x, mainframe_y, mainframe_width, mainframe_heigth))
mainframe.title('test')
mainframe_menu = Menu(mainframe)
mainframe.geometry(Menu = mainframe_menu)
n_book = ttk.Notebook(mainframe)
n_book.pack(fill='both', expand='yes')
# create a child frame for each page
frame_1 = tk.Frame(bg='red')
frame_2 = tk.Frame(bg='blue')
frame_3 = tk.Frame(bg='green')
# create the pages
n_book.add(frame_1, text='page1')
n_book.add(frame_2, text='page2')
n_book.add(frame_3, text='page3')
# put a button widget on child frame f1 on page1
btn1 = tk.Button(frame_1, text='button1')
btn1.pack(side='left', anchor='nw', padx=3, pady=5)
mainframe.mainloop()



Офлайн

#7 Фев. 20, 2013 13:58:56

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

ttk notebook

Вообще отстой получается.
А может можно сразу все импортировать? Чтоб без всяких вылетов: не найден tk или tkinter и т.д.
Вот так вроде работает. Но но пришлось убрать фон. Оно теперь и bg не знает что такое.

# -*- coding: utf-8 -*-
from tkinter import*
from tkinter.ttk import*
mainframe = Tk()
# use width x height + x_offset + y_offset (no spaces!)
mainframe.minsize(800,500)
mainframe_x = 800
mainframe_y = 500
mainframe_width = (mainframe.winfo_screenwidth() / 2 - mainframe_x / 2)
mainframe_heigth = (mainframe.winfo_screenheight() / 2 - mainframe_y / 2)
mainframe.geometry("%dx%d+%d+%d" % (mainframe_x, mainframe_y, mainframe_width, mainframe_heigth))
mainframe.title('test')
mainframe_menu = Menu(mainframe)
mainframe.config(menu = mainframe_menu)
n_book = Notebook(mainframe)
n_book.pack(fill='both', expand='yes')
# create a child frame for each page
frame_1 = Frame()
frame_2 = Frame()
frame_3 = Frame()
# create the pages
n_book.add(frame_1, text='page1')
n_book.add(frame_2, text='page2')
n_book.add(frame_3, text='page3')
# put a button widget on child frame f1 on page1
btn1 = Button(frame_1, text='button1')
btn1.pack(side='left', anchor='nw', padx=3, pady=5)
mainframe.mainloop()



Офлайн

#8 Фев. 20, 2013 14:01:31

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

ttk notebook

Ubhra
Какой питон?



Офлайн

#9 Фев. 20, 2013 14:09:18

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

ttk notebook

3.3 + pyscripter 2.5.3



Офлайн

#10 Фев. 20, 2013 14:21:02

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

ttk notebook

Гарантий не даю, но скорее всего этот код будет работать…
Просто я не пишу под 3.Х :)

# -*- coding: utf-8 -*-
import tkinter
import ttk
mainframe = tkinter.Tk()
# use width x height + x_offset + y_offset (no spaces!)
mainframe_width = (mainframe.winfo_screenwidth() / 2 - 200)
mainframe_heigth = (mainframe.winfo_screenheight() / 2 - 250)
mainframe.geometry("%dx%d+%d+%d" % (800, 600, mainframe_width, mainframe_heigth))
mainframe.title('test')
n_book = ttk.Notebook(mainframe)
n_book.pack(fill='both', expand='yes')
# create a child frame for each page
style = ttk.Style()
style.configure("1.TFrame", background="red")
style.configure("2.TFrame", background="blue")
style.configure("3.TFrame", background="green")
frame_1 = ttk.Frame(mainframe, style="1.TFrame")
frame_2 = ttk.Frame(mainframe, style="2.TFrame")
frame_3 = ttk.Frame(mainframe, style="3.TFrame")
frame_1.pack()
frame_2.pack()
frame_3.pack()
# create the pages
n_book.add(frame_1, text='page1')
n_book.add(frame_2, text='page2')
n_book.add(frame_3, text='page3')
# put a button widget on child frame f1 on page1
btn1 = ttk.Button(frame_1, text='button1')
btn1.pack(side='left', anchor='nw', padx=3, pady=5)
mainframe.mainloop()
Ну что, работает?
Код исправил… Не хватало двух начений.



Отредактировано 4kpt (Фев. 20, 2013 14:25:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version