Первые шаги в wxPython [Урок №2]
Изучение wxPython » Примеры Python » Python для начинающих » Общие вопросы wxpython, wxpython python 3, wxpython примеры
В этой части обучения wxPython мы постараемся создать простейшие примеры.
Простой пример
Начать следует с самого простого примера. Нашим первым скриптом будет простое отображение небольшого окна. Мы проанализируем каждую линию нашего простейшего скрипта.
#!/usr/bin/python
import wx
app = wx.App()
frame = wx.Frame(None, -1, 'simple.py')
frame.Show()
app.MainLoop()
Это наш первый пример на wxPython.
#!/usr/bin/python
Первая линия начинается с шебанга (последовательность символов «#» и «!»), после которого следует путь к интерпретатору.
import wx
Следующая линия позволяет импортировать базовые модули wxPython. Среди них: ядро, элементы управления, графический интерфейс, окна и прочее. Технически, wx – это пространство имен. Все функции и объекты базовых модулей начинаются с префикса wx.
Следующая линия нашего кода создает объект приложения.
app = wx.App()
Каждая программа на wxPython должна иметь один объект приложения.
frame = wx.Frame(None, -1, 'simple.py')
frame.Show()
В этом участке мы создаем объект wx.Frame. Виджет wx.Frame является важным виджетом контейнера. Немного позже мы разберем этот виджет детальнее. Сам виджет wx.Frame является родительским для остальных виджетов. У него нет родительского виджета. Если мы укажем «none» для родительского параметра, то увидим, что у нашего виджета нет родительских виджетов. Таким образом wx.Frame является наивысшим виджетом в иерархии.
После того как мы создали виджет wx.Frame, нам необходимо воспользоваться методом Show(), чтбы отобразить его на экране.
app.MainLoop()
Последняя линия запускает основной цикл. Он является бесконечным. Основной цикл отлавливает и отправляет все события, которые происходят во время жизни приложения.
Этот пример был очень простым. Но, несмотря на простоту, с итоговым окном можно сделать много работы. В частности, мы можем изменить размер окна, минимизировать его или развернуть. Для этого функционала требуется достаточно много кода. Все эти возможности скрыты и доступны по умолчанию в инструментарии wxPython. Нет необходимости заново изобретать колесо.
Рис. 1. Результат нашего простого кода.
Wx.Frame
Виджет wx.Frame – один из наиболее важных в wxPython. Это виджет-контейнер. Это означает, что он может содержать внутри другие виджеты. На самом деле он может содержать любое окно, которое не является фреймом или диалогом. Виджет wx.Frame состоит из заголовка, граней и центральной части контейнера. Заголовок и грани являются опциональными. Их можно убрать, используя разные флаги.
Wx.Frame имеет следующий конструктор:
wx.Frame(wx.Window parent, int id=-1, string title='', wx.Point pos = wx.DefaultPosition,
wx.Size size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, string name = "frame")
Конструктор имеет семь параметров. У первого параметра нет значения по умолчанию. Остальные семь параметров такое значение имеют. При этом первые три параметра – обязательные, а последние четыре – опциональные.
wx.DEFAULT_FRAME_STYLE представляет собой набор флагов по умолчанию. wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN. Комбинируя разные стили, мы можем изменять стилистику виджета wx.Frame. Ниже представлен наглядный пример изменения стилей.
#!/usr/bin/python
# nominimizebox.py
import wx
app = wx.App()
window = wx.Frame(None, style=wx.MAXIMIZE_BOX | wx.RESIZE_BORDER
| wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)
window.Show(True)
app.MainLoop()
Нашим намерением было отображение окна без функции сворачивания. Поэтому мы не указали данный флаг в параметре style.
Рис. 2. Окно без элемента сворачивания.
Размер и позиция
Мы можем самостоятельно указать размер нашего приложения двумя разными способами. В первую очередь у нас есть параметр размера в конструкторе виджета. Также, мы можем воспользоваться методом SetSize().
#!/usr/bin/python
# -*- coding: utf-8 -*-
# size.py
import wx
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title,
size=(250, 200))
self.Show()
if __name__ == '__main__':
app = wx.App()
Example(None, title='Size')
app.MainLoop()
В этом примере размер приложения будет составлять 250х200 пикселей.
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title,
size=(250, 200))
В конструкторе мы указали ширину виджета wx.Frame в 250 пикселей. Высоту виджета – в 200 пикселей.
Аналогичным образом мы можем позиционировать наше приложение на экране. По умолчанию окно фиксируется в левом верхнем углу экрана. Но, в зависимости от разных операционных систем и даже менеджеров окон, положение может меняться. Некоторые из менеджеров окон самостоятельно выбирают позицию окон приложения.
Некоторые из них выполняют оптимизацию, в результате которой окна не перекрываются. В то же время программист может сам позиционировать окно. В конструкторе виджета wx.Frame нам уже попадался параметр pos. Если устанавливать значения, отличные от указанных по умолчанию, мы сможем управлять позицией размещения окна.
Существует несколько методов, с помощью которых можно сделать это.
#!/usr/bin/python
# -*- coding: utf-8 -*-
# move.py
import wx
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title,
size=(300, 200))
self.Move((800, 250))
self.Show()
if __name__ == '__main__':
app = wx.App()
Example(None, title='Move')
app.MainLoop()
Также существуют ситуации, когда нам может потребоваться отображение окна с максимальными размерами. В этом случае окно размещается в позиции (0, 0) и занимает весь экран. В данном случае wxPython вычисляет внутренние координаты экрана. Для отображения окна wx.Frame с максимальными размерами используется метод Maximize().
Центрирование на экране
Если мы захотим центрировать наше приложение на экране, у wxPython найдется для этого удобный метод. Используя метод Centre() наше окно будет размещено в центре экрана. Нет необходимости высчитывать ширину и высоту экрана для определения позиции окна. Нужно лишь воспользоваться данным методом.
#!/usr/bin/python
# -*- coding: utf-8 -*-
# center.py
import wx
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title,
size=(300, 200))
self.Centre()
self.Show()
if __name__ == '__main__':
app = wx.App()
Example(None, title='Center')
app.MainLoop()
В этом примере мы центрировали небольшое окно на нашем экране.
self.Centre()
Это метод, который центрирует окно на экране.
В этом разделе мы изучили наиболее простые примеры работы wxPython.
- Игровой автомат Starburst - в онлайн казино Вулкан Вегас выгодно проведи время
- Отличия онлайн развлечений от игры в наземном казино
- Работа с файлами в Python
- Python языком сценариев?
- Определение страны по IP-адресу Python
- Преимущества ранних и поздних ставок в БК ВулканБет
- Разработка на Django под Windows при помощи Docker-machine