На недавнем Python (> 2.7) версии, можно использовать ttk
модуль, который обеспечивает доступ к Tk тематический виджет набор, который был представлен в Tk 8.5
.
Вот то, как Вы импортируете ttk
в Python 2:
import ttk
help(ttk.Notebook)
В Python 3, ttk
модуль идет со стандартными дистрибутивами как с подмодулем [1 118] tkinter
.
Вот простой рабочий пример на основе примера от TkDocs
веб-сайт:
from tkinter import ttk
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
def demo():
root = tk.Tk()
root.title("ttk.Notebook")
nb = ttk.Notebook(root)
# adding Frames as pages for the ttk.Notebook
# first page, which would get widgets gridded into it
page1 = ttk.Frame(nb)
# second page
page2 = ttk.Frame(nb)
text = ScrolledText(page2)
text.pack(expand=1, fill="both")
nb.add(page1, text='One')
nb.add(page2, text='Two')
nb.pack(expand=1, fill="both")
root.mainloop()
if __name__ == "__main__":
demo()
Другая альтернатива должна использовать NoteBook
виджет от tkinter.tix
библиотека. Для использования tkinter.tix
необходимо было установить эти Tix
виджеты, обычно вместе с установкой эти Tk
виджеты. Для тестирования установки попробуйте следующее:
from tkinter import tix
root = tix.Tk()
root.tk.eval('package require Tix')
Для большего количества информации, проверьте этот веб-страница на веб-сайте PSF.
Примечание, которое tix
довольно старо и не хорошо поддерживаемое, таким образом, Ваш лучший выбор мог бы состоять в том, чтобы пойти для [1 115].
Не использовать ViewData
. Используйте вместо этого в своем Site.Master:
<%= ViewContext.RouteData.Values["Controller"] %>
<%= ViewContext.RouteData.Values["Action"] %>
SO - Получение имени контроллера и метода действия в представлении в ASP.Net MVC
Предполагая, что я правильно читаю ваш пост, и вы не пытаетесь получить доступ к именам контроллеров / действий в представлении, а ВМЕСТО пытаетесь что-то с ними сделать и помещаете результат в viewdata:
Вы не можете сделать это в конструкторе, потому что контекст еще не создан. Вам нужно переопределить метод Initialize:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
//here the routedata is available
ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"];
}
(Обратите внимание, что вы можете передать в функцию только ControllerContext.RouteData и позволить ей выбирать нужные значения.)
Мне нужно было много разобраться с этими представлениями, и я рассмотрел это с немного другого угла - я написал несколько методов расширения для HtmlHelper, чтобы дать текущие ControllerName и ActionName. Немного проще в обращении, так как вам не нужно беспокоиться о том, чтобы нырнуть в пакет ViewData [] или ввести что-то в подходящие места.