Опубликован: 22.12.2005 | Доступ: свободный | Студентов: 17070 / 526 | Оценка: 4.18 / 3.71 | Длительность: 16:16:00
ISBN: 978-5-9556-0109-0
Лекция 12:

Создание приложений с графическим интерфейсом пользователя

Создание и конфигурирование виджета

Создание виджета происходит вызовом конструктора соответствующего класса. Вызов конструктора имеет следующий синтаксис:

Widget([master[, option=value, ...]])

Здесь Widget - класс виджета, master - виджет-хозяин, option и value - конфигурационная опция и ее значение (таких пар может быть несколько).

Каждый виджет имеет свойства, которые можно устанавливать (конфигурировать) с помощью методов config() (или configure() ) и читать с помощью методов, подобных методам работы со словарями. Ниже приведен возможный синтаксис для работы со свойствами:

widget.config(option=value, ...)
                widget["option"] = value
                value = widget["option"]
                widget.keys()

В случае, когда имя свойства совпадает с ключевым словом языка Python, принято использовать после имени одиночное подчеркивание. Так, свойство class нужно задавать как class_, а to как to_.

Изменять конфигурацию виджета можно в любой момент. Это изменение прорисуется на экране по возвращении в цикл обработки событий или при явном вызове update_idletasks().

Следующий пример показывает окно с двумя виджетами внутри - полем ввода и надписью. С помощью переменной надпись напрямую связана с полем ввода. Этот пример нарочно использует очень много свойств, чтобы продемонстрировать возможности по конфигурированию:

from Tkinter import *
                tk = Tk()
                tv = StringVar()
                Label(tk,
                      textvariable=tv,
                      relief="groove",
                      borderwidth=3,
                      font=("Courier", 20, "bold"),
                      justify=LEFT,
                      width=50,
                      padx=10,
                      pady=20,
                      takefocus=False,
                      ).pack()
                Entry(tk,
                      textvariable=tv,
                      takefocus=True,
                      ).pack()
                tv.set("123")
                tk.mainloop()

В результате на экране можно увидеть:


Виджеты конфигурируются прямо при создании. Более того, виджеты не связываются с именами, их только располагают внутри виджета-окна. В данном примере использованы свойства textvariable (текстовая переменная), relief (рельеф), borderwidth (ширина границы), justify (выравнивание), width (ширина, в знакоместах), padx и pady (прослойка в пикселях между содержимым и границами виджета), takefocus (возможность принять фокус при нажатии клавиши Tab), font (шрифт, один из способов его задания). Эти свойства достаточно типичны для многих виджетов, хотя иногда единицы измерения могут отличаться, например, для виджета Canvas ширина задается в пикселях, а не в знакоместах.

В следующем примере демонстрируются возможности по назначению цветов фону, переднему плану (тексту), выделению виджета (подсветка границы) в активном состоянии и при отсутствии фокуса:

from Tkinter import *
                tk = Tk()
                tv = StringVar()
                Entry(tk,
                      textvariable=tv,
                      takefocus=True,
                      borderwidth=10,
                      ).pack()
                mycolor1 = "#%02X%02X%02X" % (200, 200, 20)
                Entry(tk,
                      textvariable=tv,
                      takefocus=True,
                      borderwidth=10,
                      foreground=mycolor1,              # fg, текст виджета
                      background="#0000FF",             # bg, фон виджета
                      highlightcolor='green',           # подсветка при фокусе
                      highlightbackground='red',        # подсветка без фокуса
                      ).pack()
                tv.set("123")
                tk.mainloop()

При желании можно задать стилевые опции для всех виджетов сразу: с помощью метода tk_setPalette(). Помимо использованных выше свойств в этом методе можно использовать selectForeground и selectBackground (передний план и фон выделения), selectColor (цвет в выбранном состоянии, например, у Checkbutton ), insertBackground (цвет точки вставки) и некоторые другие.

Примечание:

Получить значение из поля ввода можно и при помощи метода get(). Например, если назвать объект класса Entry именем e, получить значение можно так: e.get(). Правда, этот метод не обладает той же гибкостью, что метод get() экземпляров класса для форматированного текста Text: можно взять только все значение целиком.

Зураб Муциев
Зураб Муциев

Здравствуйте друзья, коллеги.

С кем из тьюторов вы работаете? Просто возникают вопросы, и хочется чтоб обяснили на примере как это происходит, гугл не всегда дает ответа.

Постить в соц сетях, там не всегда адекват, и чаще они базарят не по делу.

Андрей Егоров
Андрей Егоров

def bin(n):

"""Цифры двоичного представления натурального числа """

if n == 0:

   return []

n, d = divmod(n, 2)

return bin(n) + [d]

print bin(69)

Что значит здесь return[] ? Возвращает список? Непонятно какой список? Откуда он? 

 

 

Артем Хмелев
Артем Хмелев
Россия, 5
Александр Ясенский
Александр Ясенский
Россия