Найти - Пользователи
Полная версия: ttk notebook
Начало » GUI » ttk notebook
1 2
Ubhra
Напрямую импортировать ttk не получается. Пишет ImportError: No madule named ‘ttk’
Получается только tkinter.ttk
Ubhra
Вот вычитал тут:
http://docs.python.org/dev/library/tkinter.ttk.html?highlight=ttk#using-ttk

Можете пояснить это?

To start using Ttk, import its module:
from tkinter import ttk

To override the basic Tk widgets, the import should follow the Tk import:
from tkinter import *
from tkinter.ttk import *
4kpt
Проблема здесь в том, что в tkinter и ttk есть виджет с одинаковым названием - frame. Как системе распозднать, какой виджет Вы имеете ввиду??
Я думаю нужно писать так…
# -*- coding: utf-8 -*-
import tkinter
from tkinter.ttk import*
mainframe = tkinter.Tk()
# use width x height + x_offset + y_offset (no spaces!)
mainframe_width = (mainframe.winfo_screenwidth() / 2 - 400)
mainframe_heigth = (mainframe.winfo_screenheight() / 2 - 250)
mainframe.geometry("%dx%d+%d+%d" % (800, 500, mainframe_width, mainframe_heigth))
mainframe.title('test')
n_book = Notebook(mainframe)
n_book.pack(fill='both', expand='yes')
# create a child frame for each page
style = Style()
style.configure("1.TFrame", background="red")
style.configure("2.TFrame", background="blue")
style.configure("3.TFrame", background="green")
frame_1 = Frame(mainframe, style="1.TFrame")
frame_2 = Frame(mainframe, style="2.TFrame")
frame_3 = 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 = Button(frame_1, text='button1')
btn1.pack(side='left', anchor='nw', padx=3, pady=5)
mainframe.mainloop()
py.user.next
Ubhra
А может можно сразу все импортировать? Чтоб без всяких вылетов: не найден tk или tkinter и т.д.
засоряется пространство имён
прочитай import this
Griffon
Все просто. В Tk есть набор виджетов. В ttk есть набор виджетов. Оба набора имеют пересечение, то есть определение одних и тех же виджетов. Таким образом import * переопределяет имена классов, в зависимости от того что вы импортируете последним.

Теперь становится понятным почему пропадают свойства у кнопок и прочих элементов. Вы последним импортируете ttk, а в нем стили реализованы в своей философии, и все свойства определяющие стили Tk теперь вызывают ошибку.

Вам следует почитать про импорт, как рекомендуют выше, а так же почитать по Tkinter и ttk, и увидеть разницу между одноименными виджетами.

Последняя (известная мне) документация по Tkinter и ttk.
4kpt
Griffon
Можно реализовать так как я писал выше:
import tkinter
from tkinter.ttk import*
В этом случае пересечений не будет, так как для вызова виджетов tkinter необходимо явно указывать имя модуля (т.е. tkinter.Button или tkinter.Frame), а для вызова методов ttk нужно их просто вызывать (извините, получилась товтология), т.е. (Buuton, Frame).
Либо действительно необходимо четко следить за импортированием. За это я не люблю инструкцию
from имя_модуля import* о чем уже не однократно писал.
Помню раньше, всем поголовно, в каждом посте по Tkinter рекомендовал не использовать инструкцию from Tkinter import* (быля у меня такая манечка) :)
lenivaya10001
4kpt
Ну что, работает?
вот так работает в python 3.4.4, исправлен только импорт
 # -*- coding: utf-8 -*-
import tkinter
from 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()
ivikis
Как ярлычки вкладок (ttk notebook) разместить внизу?

Не то, что хотелось:
s = ttk.Style()
s.configure('TNotebook', tabposition='sw')
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