Форум сайта python.su
Напрямую импортировать ttk не получается. Пишет ImportError: No madule named ‘ttk’
Получается только tkinter.ttk
Офлайн
Вот вычитал тут:
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 *
Офлайн
Проблема здесь в том, что в 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()
Офлайн
Ubhraзасоряется пространство имён
А может можно сразу все импортировать? Чтоб без всяких вылетов: не найден tk или tkinter и т.д.
Офлайн
Все просто. В Tk есть набор виджетов. В ttk есть набор виджетов. Оба набора имеют пересечение, то есть определение одних и тех же виджетов. Таким образом import * переопределяет имена классов, в зависимости от того что вы импортируете последним.
Теперь становится понятным почему пропадают свойства у кнопок и прочих элементов. Вы последним импортируете ttk, а в нем стили реализованы в своей философии, и все свойства определяющие стили Tk теперь вызывают ошибку.
Вам следует почитать про импорт, как рекомендуют выше, а так же почитать по Tkinter и ttk, и увидеть разницу между одноименными виджетами.
Последняя (известная мне) документация по Tkinter и ttk.
Отредактировано Griffon (Фев. 21, 2013 09:46:38)
Офлайн
Griffon
Можно реализовать так как я писал выше:
import tkinter from tkinter.ttk import*
Отредактировано 4kpt (Фев. 21, 2013 13:59:53)
Офлайн
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()
Офлайн
Как ярлычки вкладок (ttk notebook) разместить внизу?
Не то, что хотелось:
s = ttk.Style()
s.configure('TNotebook', tabposition='sw')
Отредактировано ivikis (Сен. 1, 2019 17:30:27)
Офлайн