Различия между версиями 1 и 2
Версия 1 от 2010-05-25 04:22:00
Размер: 2026
Редактор: alafin
Комментарий:
Версия 2 от 2010-05-25 17:57:44
Размер: 13089
Редактор: alafin
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 18: Строка 18:
=== Как вывести статический текст? ===

Возможно, основная задача любого пакета для разработки интерфейса пользователя состоит в рисовании на экране простого текста. В wxPython это выполняется на базе класса wx.StaticText. Рисунок 7.1 отображает статические текстовые элементы.

В wx.StaticText Вы можете изменять выравнивание, шрифт и цвет текста. Отдельный виджет статического текста может содержать многострочный текст, однако, он не может управлять множеством шрифтов или стилей. Для поддержки множества шрифтов или стилей используйте более сложный текстовый элемент управления, например, wx.html.HTMLWindow, описываемый в главе 16. Для того, чтобы отображать множество строк внутри статического текстового поля, включите в него строку с символами новой строки и сделайте элемент достаточно большим, чтобы отображать весь текст. Единственная особенность, которая не видна на рисунке, состоит в том, что окно wx.StaticText никогда не получает и не реагирует на события мыши, и оно никогда не получает фокус ввода.

'''Рисунок 7.1 Примеры виджетов wx.StaticText с изменением шрифта, выравнивания и цвета'''

'''Вывод статического текста'''

Листинг 7.1 показывает текст программы, соответствующий рисунку 7.1

'''Листинг 7.1 Базовый пример использования статического текста'''
{{{#!highlight python
import wx
class StaticTextFrame(wx.Frame):
    def __init__(self):
         wx.Frame.__init__(self, None, -1, 'Static Text Example',
                  size=(400, 300))
         panel = wx.Panel(self, -1)
         wx.StaticText(panel, -1, "This is an example of static text",
                  (100, 10))
         rev = wx.StaticText(panel, -1,
                  "Static Text With Reversed Colors",
                  (100, 30))
         rev.SetForegroundColour('white')
         rev.SetBackgroundColour('black')
         center = wx.StaticText(panel, -1,
                  "align center", (100, 50),
                  (160, -1), wx.ALIGN_CENTER)
         center.SetForegroundColour('white')
         center.SetBackgroundColour('black')
         right = wx.StaticText(panel, -1,
                  "align right", (100, 70),
                  (160, -1), wx.ALIGN_RIGHT)
         right.SetForegroundColour('white')
         right.SetBackgroundColour('black')
         str = "You can also change the font."
         text = wx.StaticText(panel, -1, str, (20, 100))
         font = wx.Font(18, wx.DECORATIVE,
                 wx.ITALIC, wx.NORMAL)
         text.SetFont(font)
         wx.StaticText(panel, -1,
                  "Your text\ncan be split\n"
                  "over multiple lines\n\neven blank ones", (20,150))
         wx.StaticText(panel, -1,
                  "Multi-line text\ncan also\n"
                  "be right aligned\n\neven with a blank", (220,150),
                  style=wx.ALIGN_RIGHT)
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = StaticTextFrame()
    frame.Show()
    app.MainLoop()
Конструктор для wx.StaticText идентичен базовым конструкторам wxWidget:
 wx.StaticText(parent, id, label, pos=wx.DefaultPosition,
          size=wx.DefaultSize, style=0, name="staticText")
}}}

Конструктор для wx.StaticText идентичен базовым конструкторам wxWidget:
{{{#!highlight python
wx.StaticText(parent, id, label, pos=wx.DefaultPosition,
         size=wx.DefaultSize, style=0, name="staticText")
}}}

Таблица 7.1 показывает назначение его параметров - подобный набор параметров в своих конструкторах имеет большинство виджетов wxPython. За детальным описанием параметров конструктора обращайтесь к обсуждению виджетов в главе 2.

'''Таблица 7.1 Параметры конструктора wx.StaticText'''
||'''Параметр'''||'''Назначение'''||
||parent||Виджет, вмещающий данный статический текст||
||id||Идентификатор wxPython. Для автоматического создания уникального идентификатора необходимо использовать значение -1.||
||label||Текст, который необходимо отобразить||
||pos||Позиция виджета на базе объекта wx.Point или кортеж (tuple) Python||
||size||Размер создаваемого виджета на базе объекта wx.Size или кортеж (tuple) Python||
||style||Флаг стиля||
||name||Имя объекта, используемое при поиске||

В следующем разделе мы подробно обсудим стилевые флаги.

'''Работа со стилями'''

Все методы, вызываемые для экземпляров статического текста в листинге 7.1, принадлежат родительскому классу wx.Window; wx.StaticText не определяет каких-либо новых собственных методов. Несколько характерных для wx.StaticText стилевых флагов указаны в таблице 7.2.

'''Таблица 7.2 Стилевые флаги класса wx.StaticText'''
||'''Стиль'''||'''Описание'''||
||wx.ALIGN_CENTER||Центрирует статический текст внутри размерного прямоугольника виджета||
||wx.ALIGN_LEFT||Выравнивание текста виджета слева. Этот стиль установлен по умолчанию.||
||wx.ALIGN_RIGHT||Выравнивание текста виджета справа.||
||wx.ST_NO_AUTORESIZE||Если использован этот флаг, виджет со статическим текстом не будет самостоятельно изменять свои размеры после изменения текста методом SetLabel(). Чтобы сохранять выравнивание, Вам нужно использовать данный стиль вместе с центрированием или выравниванием поля справа.||

Элемент управления wx.StaticText перекрывает метод SetLabel() для изменения своих размеров на основании нового текста, что происходит, если не установлен стиль wx.ST_NO_AUTORESIZE.
     
При создании однострочного поля статического текста с центрированием или выравниванием справа, Вы должны явно устанавливать в конструкторе размер этого поля. Определение размера сдерживает wxPython от автоматического изменения размеров элемента управления. В wxPython размер по умолчанию соответствует минимальному окружающему текст прямоугольнику. Так как по умолчанию размер текстового поля никак не больше размещенного в нем текста и при отображении выравнивания пустого пространства не образуется, не имеет значения выравнено ли поле слева, справа или по центру. Для того чтобы при выполнении программы изменять текст в виджете динамически без изменения размера поля, установите стиль wx.ST_NO_AUTORESIZE. Это не даёт виджету после изменения текста привести свои размеры к минимальному прямоугольнику. Если статический текст размещается внутри динамической формы, изменение его размера может переместить на экране другие виджеты, отвлекая при этом внимание пользователя.

'''Другие приёмы вывода текста'''

Имеются и другие способы размещения статического текста на Вашем экране. Во-первых, можно использовать класс wx.lib.stattext.GenStaticText, который представляет собой видоизмененную Python- реализацию класса wx.StaticText. Он более согласован в кросс-платформенном плане, чем стандартная версия C++, и он принимает события мыши. Он также предпочтителен, когда Вам необходим подкласс при создании собственного статического текстового элемента
управления.
    
Вы можете рисовать текст непосредственно в Вашем контексте устройства при помощи метода DrawText(text, x, y) или метода DrawRotatedText(text, x, y, angle). Последний является простейшим способом вывести текст под углом, хотя имеется также управляющий вращением подкласс GenStaticText. Контексты устройства были кратко рассмотрены в главе 6 и будут рассмотрены более подробно в главе 12.





















Работа с основными элементами управления

Эта глава включает:

  • Вывод текста
  • Работа с кнопками
  • Ввод и отображение чисел
  • Предоставление пользователю возможности выбора

Инструментарий wxPython предоставляет множество различных виджетов, включая базовые элементы управления, являющиеся темой этой главы. Мы исследуем начальный набор виджетов, содержащий следующие элементы управления: статический текст, редактируемый текст, кнопки, счетчики (spinners), ползунки (slider), флажки (check box), переключатели (radio button), списки (list box), выпадающие списки (choice), комбинированные списки (combo box) и индикаторы прогресса (gauge). Для каждого виджета мы покажем короткий пример его использования, сопровождаемый описанием важных частей API wxPython.

Вывод текста

Этот раздел начинается с примеров отображения текста на экране, которые содержат используемые Вами в качестве меток стилизованные и простые поля статического текста. Вы также сможете создать текстовые поля для однострочного или многострочного ввода пользователя. К тому же, мы рассмотрим, как выбрать шрифт текста.

Как вывести статический текст?

Возможно, основная задача любого пакета для разработки интерфейса пользователя состоит в рисовании на экране простого текста. В wxPython это выполняется на базе класса wx.StaticText. Рисунок 7.1 отображает статические текстовые элементы.

В wx.StaticText Вы можете изменять выравнивание, шрифт и цвет текста. Отдельный виджет статического текста может содержать многострочный текст, однако, он не может управлять множеством шрифтов или стилей. Для поддержки множества шрифтов или стилей используйте более сложный текстовый элемент управления, например, wx.html.HTMLWindow, описываемый в главе 16. Для того, чтобы отображать множество строк внутри статического текстового поля, включите в него строку с символами новой строки и сделайте элемент достаточно большим, чтобы отображать весь текст. Единственная особенность, которая не видна на рисунке, состоит в том, что окно wx.StaticText никогда не получает и не реагирует на события мыши, и оно никогда не получает фокус ввода.

Рисунок 7.1 Примеры виджетов wx.StaticText с изменением шрифта, выравнивания и цвета

Вывод статического текста

Листинг 7.1 показывает текст программы, соответствующий рисунку 7.1

Листинг 7.1 Базовый пример использования статического текста

   1 import wx
   2 class StaticTextFrame(wx.Frame):
   3     def __init__(self):
   4          wx.Frame.__init__(self, None, -1, 'Static Text Example',
   5                   size=(400, 300))
   6          panel = wx.Panel(self, -1)
   7          wx.StaticText(panel, -1, "This is an example of static text",
   8                   (100, 10))
   9          rev = wx.StaticText(panel, -1,
  10                   "Static Text With Reversed Colors",
  11                   (100, 30))
  12          rev.SetForegroundColour('white')
  13          rev.SetBackgroundColour('black')
  14          center = wx.StaticText(panel, -1,
  15                   "align center", (100, 50),
  16                   (160, -1), wx.ALIGN_CENTER)
  17          center.SetForegroundColour('white')
  18          center.SetBackgroundColour('black')
  19          right = wx.StaticText(panel, -1,
  20                   "align right", (100, 70),
  21                   (160, -1), wx.ALIGN_RIGHT)
  22          right.SetForegroundColour('white')
  23          right.SetBackgroundColour('black')
  24          str = "You can also change the font."
  25          text = wx.StaticText(panel, -1, str, (20, 100))
  26          font = wx.Font(18, wx.DECORATIVE,
  27                  wx.ITALIC, wx.NORMAL)
  28          text.SetFont(font)
  29          wx.StaticText(panel, -1,
  30                   "Your text\ncan be split\n"
  31                   "over multiple lines\n\neven blank ones", (20,150))
  32          wx.StaticText(panel, -1,
  33                   "Multi-line text\ncan also\n"
  34                   "be right aligned\n\neven with a blank", (220,150),
  35                   style=wx.ALIGN_RIGHT)
  36 if __name__ == '__main__':
  37     app = wx.PySimpleApp()
  38     frame = StaticTextFrame()
  39     frame.Show()
  40     app.MainLoop()
  41 Конструктор для wx.StaticText идентичен базовым конструкторам wxWidget:
  42  wx.StaticText(parent, id, label, pos=wx.DefaultPosition,
  43           size=wx.DefaultSize, style=0, name="staticText")

Конструктор для wx.StaticText идентичен базовым конструкторам wxWidget:

   1 wx.StaticText(parent, id, label, pos=wx.DefaultPosition,
   2          size=wx.DefaultSize, style=0, name="staticText")

Таблица 7.1 показывает назначение его параметров - подобный набор параметров в своих конструкторах имеет большинство виджетов wxPython. За детальным описанием параметров конструктора обращайтесь к обсуждению виджетов в главе 2.

Таблица 7.1 Параметры конструктора wx.StaticText

Параметр

Назначение

parent

Виджет, вмещающий данный статический текст

id

Идентификатор wxPython. Для автоматического создания уникального идентификатора необходимо использовать значение -1.

label

Текст, который необходимо отобразить

pos

Позиция виджета на базе объекта wx.Point или кортеж (tuple) Python

size

Размер создаваемого виджета на базе объекта wx.Size или кортеж (tuple) Python

style

Флаг стиля

name

Имя объекта, используемое при поиске

В следующем разделе мы подробно обсудим стилевые флаги.

Работа со стилями

Все методы, вызываемые для экземпляров статического текста в листинге 7.1, принадлежат родительскому классу wx.Window; wx.StaticText не определяет каких-либо новых собственных методов. Несколько характерных для wx.StaticText стилевых флагов указаны в таблице 7.2.

Таблица 7.2 Стилевые флаги класса wx.StaticText

Стиль

Описание

wx.ALIGN_CENTER

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

wx.ALIGN_LEFT

Выравнивание текста виджета слева. Этот стиль установлен по умолчанию.

wx.ALIGN_RIGHT

Выравнивание текста виджета справа.

wx.ST_NO_AUTORESIZE

Если использован этот флаг, виджет со статическим текстом не будет самостоятельно изменять свои размеры после изменения текста методом SetLabel(). Чтобы сохранять выравнивание, Вам нужно использовать данный стиль вместе с центрированием или выравниванием поля справа.

Элемент управления wx.StaticText перекрывает метод SetLabel() для изменения своих размеров на основании нового текста, что происходит, если не установлен стиль wx.ST_NO_AUTORESIZE.

При создании однострочного поля статического текста с центрированием или выравниванием справа, Вы должны явно устанавливать в конструкторе размер этого поля. Определение размера сдерживает wxPython от автоматического изменения размеров элемента управления. В wxPython размер по умолчанию соответствует минимальному окружающему текст прямоугольнику. Так как по умолчанию размер текстового поля никак не больше размещенного в нем текста и при отображении выравнивания пустого пространства не образуется, не имеет значения выравнено ли поле слева, справа или по центру. Для того чтобы при выполнении программы изменять текст в виджете динамически без изменения размера поля, установите стиль wx.ST_NO_AUTORESIZE. Это не даёт виджету после изменения текста привести свои размеры к минимальному прямоугольнику. Если статический текст размещается внутри динамической формы, изменение его размера может переместить на экране другие виджеты, отвлекая при этом внимание пользователя.

Другие приёмы вывода текста

Имеются и другие способы размещения статического текста на Вашем экране. Во-первых, можно использовать класс wx.lib.stattext.GenStaticText, который представляет собой видоизмененную Python- реализацию класса wx.StaticText. Он более согласован в кросс-платформенном плане, чем стандартная версия C++, и он принимает события мыши. Он также предпочтителен, когда Вам необходим подкласс при создании собственного статического текстового элемента управления.

Вы можете рисовать текст непосредственно в Вашем контексте устройства при помощи метода DrawText(text, x, y) или метода DrawRotatedText(text, x, y, angle). Последний является простейшим способом вывести текст под углом, хотя имеется также управляющий вращением подкласс GenStaticText. Контексты устройства были кратко рассмотрены в главе 6 и будут рассмотрены более подробно в главе 12.

Перевод: Савицкий Юрий

Книги/WxPythonInAction/Работа с основными элементами управления (последним исправлял пользователь alafin 2010-05-30 08:17:31)