Python wxpython 3: wxPython Downloads | wxPython
Как использовать wxPython для Python 3? Ru Python
На вашем компьютере установлены два разных питона (3.4.1 и 2.7.5). Не ожидайте, что сможете использовать один пакет, установленный в одном python (wxPython 3.0.1.1 на python 2.7.5), автоматически, чтобы быть доступным в другом питоне.
Кроме того, wxPython (classic) не работает для Python 3. Вам нужно, чтобы wxPython Phoenix смог это сделать.
EDIT : Рекомендуемый способ (by @RobinDunn) для установки wxPython
(сорт Phoenix, который будет работать на 2.7 и 3, теперь размещенный на PyPI ) в настоящее время:
pip install wxPython
Если у вас установлена версия для разработчиков, сделайте следующее:
pip uninstall wxPython_Phoenix
Вы можете попробовать установить один из снимков wxPython Phoenix в Python 3.4.1. Однако помните, что Phoenix не на 1000% совместим с классикой, и вы можете испытать ту или иную икоту при повторном использовании классического кода ( но переход на его выполнимость и ценность).
Полное описание / описание можно найти в следующей wxPython wiki по следующей ссылке:
Установка wxPython-Phoenix с помощью pip
Есть несколько важных моментов:
что
pip
/setuptool
достаточно новый (> 6.xx /> 12.xx)что сборки являются «неофициальными», и, таким образом,
pip
отказывается его устанавливать: в основном вам нужно добавить--pre
при установке с помощью pip.что вы отказываетесь от проверки SSL
--trusted-host wxpython.org
(больше не требуется в современных версиях, где https теперь работает правильно).
Полная команда для машин Windows:
C:\python27\scripts\pip.exe install --upgrade --pre -f https://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix
Обратите внимание, что это установит wxPython Phoenix для Python 2.7.
Чтобы использовать wxPython с вашим Python 3.4x, вам нужно использовать wxPython Phoenix, как указывали другие. Для его установки вы можете:
pip install -U --pre -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix
Обратите внимание на пробел после последнего ‘/’ и wxPython_Phoenix
Как кажется, wxPython еще не полностью портирован для Python 3, хотя номер версии может это предложить. Вот почему модули wx не добавляются в sys.path
Python 3.
Вы можете либо согласиться на использование wxPython из Python 2.7, либо взглянуть на эту запись SO: все еще нет wxPython для Python 3 (или 3.3)? Это то, что предложил @ nepix32.
Кроме того, используйте другую графическую библиотеку, которая работает с Python 3. Вот список .
Проверьте свой sys.path в интерпретаторе:
import sys sys.path
Если у вас нет надлежащей ссылки на соответствующий каталог, это не сработает.
Кроме того, проверьте Lib / site-packages в каталоге python, чтобы убедиться, что wx правильно установлен на вашем python 3. (должен быть каталог, начинающийся с «wx-3.0»)
Возможно, ранее предлагаемые решения работали. Но то, что сработало для меня сегодня (1 июня 2017 года), было:
pip install - U - - pre - f https://wxpython.org/Phoenix/snapshot-builds/ wxPython
Всегда проверяйте Readme.txt для этого …
Как правильно установить wxPython? — CodeRoad
Поэтому я искал разные вещи, которые можно было бы сделать на Python, например код для мигающего текста или таймер, но когда я копировал их в свое окно, там были постоянные синтаксические ошибки. Теперь, может быть, вы не должны копировать их прямо, но одна ошибка, которую я получил, была «нет модуля с именем wx». Я узнал, что могу получить этот модуль, установив wxPython. Проблема в том, что я перепробовал все 4 варианта, и ни один из них не сработал для меня. Какой из них я загружаю и как его настроить с помощью Windows?
Спасибо
python
windows
download
wxpython
Поделиться
Источник
oisinvg
29 августа 2015 в 10:15
9 ответов
- Попытка установить wxpython на Mac OSX
Я пытаюсь установить wxpython на свой Mac OSX 10.8.3. Я загружаю образы дисков с их страницы загрузки и mount это. Когда я пытаюсь установить пакет, я получаю сообщение об ошибке, что пакет поврежден и не может быть открыт. Есть какие-нибудь предложения о том, как я могу это исправить? Я также…
- Как установить верхние заголовки сетки wxpython?
Когда я создаю сетку с wxpython, я получаю верхние заголовки столбцов как A, B, C… import wx import wx.grid as gridlib ######################################################################## class MyForm(wx.Frame): #———————————————————————- def…
9
Это на PyPI. По состоянию на wxPython 4 поддерживается Python 3.
К сожалению, у PyPI есть пакет с именем wx
, который застрял в версии 3.0.3; обязательно установите вместо него пакет с именем wxpython
.
pip install wxpython
Обратите внимание , что pip
автоматически построит для вас wxWidgets, но не установит системные зависимости wxWidgets, такие как GTK и OpenGLu. Если вышеприведенная команда завершается с ошибкой, посмотрите выше на такое сообщение:
checking for <something>... not found
checking for <something>... no
configure: error: <prereq> libraries not available
Error running configure
ERROR: failed building widgets
Это должно дать вам информацию по крайней мере об одном из пакетов, отсутствующих в вашей системе.
Список предварительных условий «official» из источника wxWidgets выглядит следующим образом:
- dpkg-dev
- build-essential
- libjpeg-dev
- libtiff-dev
- libsdl1.2-dev
- libgstreamer-plugins-base0.10-dev # или 1.0, если доступно
- libnotify-dev
- freeglut3
- freeglut3-dev
- libsm-dev
- libgtk-3-dev
- libwebkitgtk-3.0-dev # или libwebkit2gtk-4.0-dev, если доступно
- libxtst-dev
Фактические имена пакетов, предоставленные вашим менеджером пакетов, могут не совпадать с ними точно, и, честно говоря, я действительно не знаю лучшего способа запросить менеджер пакетов, чтобы определить, какие пакеты предоставляют необходимые вам библиотеки.
Поделиться
Kyle Strand
12 мая 2017 в 19:31
8
3 шага для установки WX-виджетов и pygame в python IDLE
- Установите python 3xxx в вашей системе (добавьте 3xxx к вашему пути).
- откройте python CLI, чтобы увидеть, работает ли python или нет.
- затем откройте командную строку (CMD).
- введите PIP, чтобы узнать, установлен ли pip или нет.
- введите команду: pip установить колесо
- введите команду: pip install pygame
- Для установки wxpython
введите команду: pip install-U wxPython
Вот и все !!
Поделиться
sjrk
01 января 2018 в 01:19
5
В соответствии с инструкцией на домашней странице :
Убедитесь, что у вас есть по крайней мере версия 6.0.8 pip и 12.0.5 для setuptools.
Установите требования к Linux, как описано в readme.rst at:
https://github.com/wxWidgets/Phoenix/blob/master/README.rst
Установить wxPython-Phoenix (Linux):
sudo pip install --upgrade --trusted-host wxpython.org --pre -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix
Установите wxPython-Phoenix (Windows, используйте соответствующую папку скрипта):
C:\python27\scripts\pip.exe install --upgrade --trusted-host wxpython.org --pre -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix
Поделиться
Sergei
25 апреля 2016 в 13:40
- Как правильно установить wxpython на OS X 10.11?
Я пытаюсь установить wxpython 3.0.1.1 на свою OS X 10.11.3, python 2.7 . Я перепробовал много способов, но все равно не преуспел. —метод, описанный на главной странице wxpython, не удался даже при изменении безопасности и использовании установки из командной строки. наконец я попытался сделать…
- Не удалось установить новый wxpython
Я работаю над Debian Stable Linux и python 3.5 и пытаюсь установить новый wxpython (phoenix), используя следующую команду: pip3 install —upgrade wxpython Однако он останавливается со следующей ошибкой: checking for CAIRO… yes checking for cairo_push_group… yes checking for GST… configure:…
1
Чтобы правильно установить библиотеку wxPython GUI, перейдите на следующую страницу ( https://wxpython.org/Phoenix/snapshot-builds/ ), которая содержит моментальные снимки сборки библиотеки wxPython (версия Phoenix) в зависимости от вашей операционной системы и версии Python, с которой вы хотите работать.
Затем, когда вы скачали соответствующий пакет для вашей системы и версию python, просто установите его с помощью pip. В моем случае я выбрал именно этот вариант (wxPython_Phoenix-3.0.3.dev2811+ecc4797-cp36-cp36m-win_amd64.whl):
pip install wxPython_Phoenix-3.0.3.dev2811+ecc4797-cp36-cp36m-win_amd64.whl
Чтобы проверить, что он был успешно установлен в папке site-packages для вашей текущей среды python, напишите:
pip freeze
Это все!
Поделиться
Guiloga
06 марта 2017 в 10:50
0
Вам нужно убедиться, что версии вашей загрузки wxPython соответствуют установленной языковой библиотеке python.
Текущие загрузки wxPython загрузки не показывают никаких библиотек, построенных против python 3. Я считаю , что проект портирования python 3 все еще продолжается.
Если вы не уверены в том, что делаете, я бы придерживался 32-битной версии на windows, так как есть некоторые библиотеки Python (то есть IIRC, MySQLdb), которые не работают с 64 bit python.
Таким образом, вам нужно будет скачать python2.7 для windows x86 и » wxPython3.0-win32-py27 32-bit Python 2.7″
Поделиться
rgammans
29 августа 2015 в 10:37
0
Проверьте версию wxpython и версию python, которые есть в вашем компьютере.
Для python 2.7 используйте пакет wxPython3.0-win32-3.0.2.0-py27
Поделиться
Jyoti Panda
22 января 2019 в 17:42
0
Я установил wxPython как часть зависимостей построителя экспериментов PsychoPy, и у меня были значительные проблемы с его правильной установкой на начальном этапе. Но это было то, что сработало для меня в конце. Я использую Ubuntu 16.04, python 3.5, pip3 19.0.3
pip3 install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-16.04 wxPython --user
Поделиться
Tokaalmighty
21 марта 2019 в 19:59
0
Проблема была решена в openSuse году просто с помощью
zypper in python-wxWidgets-3_0-devel
Попытка pip install
раньше доставляла мне много хлопот (пропущенные черты, пропущенные wx/setup.h , https://github.com/wxWidgets/Phoenix/issues/1644 , error: aggregate ‘wxGLAttributes _NullGLAttributes’ has incomplete type and cannot be defined
и т. д.).
Поделиться
Friedrich
02 сентября 2020 в 10:09
0
Если вы используете Conda, то вы можете легко настроить среду с помощью wx одной строкой:
$ conda create -n wxenv python=3 wxPython
Solving environment: done
## Package Plan ##
environment location: /home/user/.conda/envs/wxenv
added / updated specs:
- python=3
- wxpython
The following packages will be downloaded:
package | build
---------------------------|-----------------
[...]
Proceed ([y]/n)?
Поделиться
nosbor
28 июля 2020 в 10:49
Похожие вопросы:
Как установить wxPython с помощью virtualenv
Я пытаюсь начать новое приложение python GUI и решил использовать wxPython как GUI, потому что мне нужен мультиплатформенный. Проблема в том, что я хочу использовать virtualenv ( с…
Не показывая фокуса в wxPython?
Я не знаю, если это глупый вопрос, но есть ли какой-то способ не показывать фокус в wxPython? Например, я построил простой GUI с несколькими кнопками, и я не хочу, чтобы пунктирный прямоугольник…
Как установить wxPython в virtualenv
Я нахожусь на машине Mac OSX Lion и скачал wxPython-src-2.9.3.1.tar.bz2. Затем я сделал следующее ( примечание: выходные сообщения были удалены ): $ tar -xjf wxPython-src-2.9.3.1.tar.bz2 $ cd…
Попытка установить wxpython на Mac OSX
Я пытаюсь установить wxpython на свой Mac OSX 10.8.3. Я загружаю образы дисков с их страницы загрузки и mount это. Когда я пытаюсь установить пакет, я получаю сообщение об ошибке, что пакет…
Как установить верхние заголовки сетки wxpython?
Когда я создаю сетку с wxpython, я получаю верхние заголовки столбцов как A, B, C… import wx import wx.grid as gridlib ########################################################################…
Как правильно установить wxpython на OS X 10.11?
Я пытаюсь установить wxpython 3.0.1.1 на свою OS X 10.11.3, python 2.7 . Я перепробовал много способов, но все равно не преуспел. —метод, описанный на главной странице wxpython, не удался даже при…
Не удалось установить новый wxpython
Я работаю над Debian Stable Linux и python 3.5 и пытаюсь установить новый wxpython (phoenix), используя следующую команду: pip3 install —upgrade wxpython Однако он останавливается со следующей…
wxPython установка в Python27
Я пытался установить wxPython в Python27. Я набрал нижеприведенную команду в Python27 dir и установил ее. pip install wxPython Я ожидал, что wxPython будет установлен в Python27. Но wxPython не…
Как установить wxPython 2.8 на Ubuntu 18.04?
Я пытаюсь установить wxPython 2.8 на систему Ubuntu 18.04. Но он терпит неудачу с приведенной ниже ошибкой : $ sudo apt install python-wxgtk2.8 Reading package lists… Done Building dependency tree…
Как установить Wxpython с Anaconda (windows)?
Я использую Anaconda для Python, и у меня возникли проблемы с поиском всеобъемлющего руководства по установке Wxpython. Из того, что я собрал по кусочкам, я скачал Wxpython из condaforge, а затем…
Знакомство с wxPython. Часть первая. Первые шаги / Хабр
Доброго времени суток!
Введение
Когда-то я вам уже рассказывал о связке Ruby/Tk. Сегодня я собираюсь продолжить знакомство с «быстрыми интерфейсами». На этот раз я расскажу вам о wxPython, а писать мы будем на Python.
На самом деле, wxPython является лишь обёрткой для библиотеки wxWidgets, который в свою очередь представляет графический тулкит, который позволяет писать кроссплатформенные приложения.
Что же такое xWidgets
wxWidgets (ранее известная как wxWindows) — это кросс-платформенная библиотека инструментов с открытым исходным кодом для разработки кроссплатформенных на уровне исходного кода приложений, в частности для построения графического интерфейса пользователя (GUI).
Она разработана не только для того, чтобы создавать GUI. Она также имеет набор классов для работы с графическими изображениями, HTML, XML документами, архивами, файловыми системами, процессами, подсистемами печати, мультимедиа, сетями, классы для организации многопоточности, отладки, отправки дампов и множество других инструментов.
Итак, приступим
Что же, начнём. А начнём мы по порядку — напишем Hello, World, чтобы понять базовые принципы построения приложения с помощью wxPython. Вот он, пред вами , государь:
import wx
app = wx.App()
wnd = wx.Frame(None, wx.ID_ANY, "I'm the title")
wnd.Show(True)
app.MainLoop()
Вы можете скачать исходный код.
Сначала давайте запустим приложение и посмотрим, что у нас получилось. Сказано — сделано.
Разбор полётов
Хорошо, теперь пора разобраться в том, что делает данный код. Овсянку, сэр!
import wx
Тут всё более, чем очевидно. Тут мы импортируем пакет для работы с wxPython.
app = wx.App()
Здесь происходит создание экземпляра нашей программы, которая впоследствии и будет запущена.
wnd = wx.Frame(None, wx.ID_ANY, "I'm the title")
Думаю, что здесь нам следует немного остановится и посмотреть на код Собственно, здесь мы создаём экземпляр нашей формы (в терминологии wxWidgets это окно).
Давайте посмотрим на заданные параметры.
- Parent — наш первый параметр. В данный момент он указывает на то, что это главное окно нашей программы и оно не наследованно от какого-либо другого.
- Id — идентификатор, который представляет собой ничто иное, как порядковый номер окна. Здесь нам не обязательно проставлять номера вручную, достаточно лишь указать wx.ID_ANY, который сам обо всём позаботится.
- Title — без комментариев…
Это заголовок нашего окна.
wnd.Show(True)
Здесь мы указываем на то, что наше окно должно стать видимым.
app.MainLoop()
И, наконец, запускаем нашу программу. Вот и всё…
Начинаем строить
Предполагается, что вы уже ознакомились с Classes Reference и знаете, какие элементы GUI доступны в wxPython. Я предлагаю нам взять и написать что-либо целостное и рабочее. Хорошо. Давайте с вами напишем миниатюрный текстовый редактор.
Добавляем поле для ввода текста
Как вы знаете, текстовое поле в wxPython представленно классом TextCtrl. По умолчанию, текстовое поле, которое мы создаём является однолинейным, т.е. запись текста будет производиться в одну строку.
Давайте исправим это и добавим атрибут style со значением TE_MULTILINE к объекту TextCtrl. Код нашего первого текстового редактора будет выглядеть так:
import wx
class Window(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title = title, size = (300,250))
self.control = wx.TextCtrl(self, style = wx.TE_MULTILINE)
self.Show(True)
app = wx.App()
wnd = Window(None, "pyNote")
app.MainLoop()
Вы можете скачать исходный код.
Давайте запустим нашу программу и убедимся, что всё работает.
Примечание: совсем забыл. Хотел добавить, что я предпологаю, что вы знакомы с ООП в Python, т.к. объяснять, что такое self или class Window(wx.Frame) я не собираюсь.
Официант, меню будьте добры
Как-то суховато выглядит наш с вами редактор, да? Конечно, в нём нету даже меню. Давайте исправим положением и создадим меню. В этом нет ничего сложного.
import wx
class Window(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title = title, size = (300,250))
self.control = wx.TextCtrl(self, style = wx.TE_MULTILINE) # создаём текстовое поле
self.Show(True)
menu = wx.Menu() # создаём экземпляр меню
menu.Append(wx.ID_ABOUT,"About","Push the button to get an information about this application") # добавляем подпункты к меню
menu.Append(wx.ID_EXIT,"Exit","Push the button to leave this application") # а как ещё?
bar = wx.MenuBar() # создаём рабочую область для меню
bar.Append(menu,"File") # добавляем пункт меню
self.SetMenuBar(bar) # указываем, что это меню надо показать в нашей форме
app = wx.App()
wnd = Window(None, "pyNote")
app.MainLoop()
Вы можете скачать исходный код.
А вот и наш редактор с меню:
Обработка событий
Но что это? Мы нажимаем «Exit», а программа не завершается. Что же, пора перейти к достаточно важному этапу — научить программу обрабатывать события. Добиться этого можно несколькими способами. Например, вот так:
def __init__(self, parent, title):
self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)
Данное выражение означает, что если мы кликнем пункт «About», то наша программа вызовет функцию OnAbout.
Хорошо, давайте объявим эту функцию. Выглядеть она будет так:
def OnAbout(self, e):
dlg = wx.MessageDialog(self, "This is a mini editor keeping your text","About pyNote", wx.OK) # создаём всплывашку
dlg.ShowModal() # показываем окошко
Вот и всё. Теперь, когда мы ткнём в «About», увидим вот такое сообщение:
Полный код приводить не стану, а скажу лишь, что…
Вы можете скачать исходный код.
Монолог? Нет, диалог!
Не будем забывать, что мы пишем какой-никакой текстовый редактор. Поэтому нам нужно организовать процесс открытия/закрытия файлов. На помощь приходит Чип и Дейл FileDialog. Для начала нам необходимо создать пункт «Open» в меню, по которму будет вызван диалог открытия файла (функция OnOpen).
Теперь нам нужно создать экземпляр FileDialog с некоторыми параметрами. Сейчас всё увидите:
import wx
import os
class Window(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title = title, size = (300,250))
self.control = wx.TextCtrl(self, style = wx.TE_MULTILINE)
self.Show(True)
menu = wx.Menu()
openItem = menu.Append(wx.ID_ANY, "Open", "Push the button to open the file")
aboutItem = menu.Append(wx.ID_ABOUT,"About","Push the button to get an information about this application")
exitItem = menu.Append(wx.ID_EXIT,"Exit","Push the button to leave this application")
bar = wx.MenuBar()
bar.Append(menu,"File")
self.SetMenuBar(bar)
self.Bind(wx.EVT_MENU, self.OnOpen, openItem)
self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)
self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
def OnAbout(self, e):
aboutDlg = wx.MessageDialog(self, "This is a mini editor keeping your text","About pyNote", wx.OK)
aboutDlg.ShowModal()
def OnOpen(self, e):
self.dirname = " "
openDlg = wx.FileDialog(self, "Choose a file to open", self.dirname, " ", "*.*", wx.OPEN) # создаём диалог
if openDlg.ShowModal() == wx.ID_OK: # при выборе файла
self.filename = openDlg.GetFilename() # ловим название файла
self.dirname = openDlg.GetDirectory() # и папку, в которой он находится
f = open(os.path.join(self.dirname,self.filename), "r") # открываем файл
self.control.SetValue(f.read()) # отображаем в текстовом поле
f.close()
wnd.SetTitle(self.filename + " - pyNote") # меняем заголовок окна
app = wx.App()
wnd = Window(None, "pyNote")
app.MainLoop()
Вы можете скачать исходный код.
Вот и всё. Давайте запустим наше творение. И, внимание… Барабанная дробь… Нажимаем на «Open» и видим…
И открываем файл…
Заключение
Вот и всё на данный момент. Сегодня мы познакомились с великолепным тулкитом под названием wxPython, который позволяет писать великолепные приложения с минимальными затратами сил.
Что почитать
wxWidgets — Википедия.
Getting Started — wxPyWiki.
Официальный сайт wxPython.
wxPython on Zetcode.
Продолжение следует!
wxpython — wxPython для Python 3
Обновленные новости по этому вопросу публикуются в wxpython wiki . Здесь вы можете найти несколько правок, обновляющих первоначальный ответ (первый более поздний)
Декабрь 2011: отличные новости! Первая сборка of проект Phoenix новый wxPython, который будет поддерживать Python 2.x и 3.x. Текущие сборки для Python 2.7.
Ноябрь 2011: последнее обновление вики — с 19 апреля 2011 года. == Нет новостей для 3.x 🙁
Предварительная дорожная карта wxPython
wxPython «Next Generation»: (продолжается) В течение последних нескольких лет периодически обсуждались совершенно новые способы создания кода, используемого для модулей расширения wxPython (a.k.a код оболочки C++). Для этой цели была проделана определенная проектная работа, и было реализовано подтверждение концепции. В двух словах, доказательство концепции превзошло все мои ожидания, и я чувствую, что это будет отличным способом автоматизировать процесс генерации кода-обертки. Более подробную информацию о целях и дизайне нового wxPython можно найти в ProjectPhoenix, а исходный код можно посмотреть в репозитории wx. Хотя новый подход в будущем значительно упростит обслуживание wxPython, все еще предстоит проделать большую работу по переходу, и поэтому он не станет задачей с наивысшим приоритетом, пока не будет завершено и проверено больше основополагающих частей низкого уровня. Тем временем текущий выпуск 2.9.x ReleaseSeries будет продолжать развиваться, используя старую технологию . #
Поддержка Python 3.x: (неизвестно) Ожидается, что некоторые действия, выполняемые для проекта Next Generation, упростят возможность поддержки как Python 2.x, так и 3.x в одном источнике. дерево, поэтому я откладываю много усилий на порте Python 3.x, чтобы не тратить время на что-то, что может закончиться тем, что его выбросят, как только будет сделан переключатель NG. Однако если этот проект следующего поколения останется в ожидании слишком долго, я, вероятно, вернусь к этому пункту и увеличу приоритет.
На данный момент (ноябрь 2011) wxPython, после Django, — самый желанный пакет для Python 3-кодировщиков:
Вот 15 наиболее часто номинированных пакеты, в которых пользователи хотят Python 3 служба поддержки
Пакет Количество голосов
Джанго 1970
wxPython 941
Matplotlib 875
………………
………………
Июнь 2010: в py3k нет расписания для wxpython
Предварительная дорожная карта wxPython
- wxPython «Следующее поколение»: (будущее) В течение последних нескольких лет периодически обсуждались совершенно новые способы генерации кода, используемого для модулей расширения wxPython (a.k.a код оболочки C++). Для этой цели была проделана определенная работа по проектированию, и началась некоторая работа над инструментами. Однако, поскольку работа над этим продвигалась медленно, я решил немного ее приостановить, чтобы я мог передать некоторые новые функции и исправления из серии выпусков 2.9 в руки разработчиков wxPython. Я ожидаю, что смогу вернуться к этой цели через некоторое время после выпуска 2.9.1. Как только дизайн, планы и инструменты будут завершены, я опубликую больше информации и открою ее для других разработчиков, чтобы помочь.
- Поддержка Python 2.7: (сейчас). Машины сборки Windows и OSX были обновлены до Python 2.7, а двоичные файлы для 2.7 включены в 2.8.11.0 и будут включены в будущие предварительные сборки и выпуски.
- Поддержка Python 3.x: (неизвестно) Я надеюсь, что некоторые вещи, которые будут сделаны для проекта Next Generation, упростят возможность поддерживать поддержку Python 2.x и 3.x в одном и том же дерево исходных текстов, поэтому я откладываю много усилий на порте Python 3.x, чтобы не тратить время на что-то, что может закончиться тем, что его выбросят, как только будет сделан переключатель NG. Однако если этот проект следующего поколения останется в ожидании слишком долго, я, вероятно, вернусь к этому пункту и увеличу приоритет.
wxPython in Action. Глава 9. Возможность выбора. Диалоги. (часть 3)
9.3 Создание мастеров
Мастер — это набор простых диалогов, соединённых последовательно друг с другом. Их цель — провести пользователя через какую-либо процедуру путём подачи и получения информации небольшими частями. На рисунке 9.11 изображён пример такого простого мастера, содержащего кнопки «вперед» и «назад».
рис 9.11
В wxPython мастер представляет из себя набор страниц, управляемый экземпляром класса wx.wizard.Wizard. Этот экземпляр обрабатывает события, создаваемые пользователем. Сами же страницы представляют из себя экземпляры классов wx.wizard.WizardPageSimple или wx.wizard.WizardPage. В обоих случаях это всего лишь экземпляры класса wx.Panel с дополнительной логикой для обслуживания последовательности страниц. Разница же между этими двумя классами в том, что wx.wizard.WizardPage позволяет динамически определить, к какой странице следует совершить переход, тогда как для wx.wizard.WizardPageSimple последовательность должна быть задана ещё на момент создания мастера. Листинг 9.11 показывает код создания простого мастера:
Листинг 9.11
import wx import wx.wizard # создаём простую страницу class TitledPage(wx.wizard.WizardPageSimple): def __init__(self, parent, title): wx.wizard.WizardPageSimple.__init__(self, parent) self.sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer) titleText = wx.StaticText(self, -1, title) titleText.SetFont( wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD)) self.sizer.Add(titleText, 0, wx.ALIGN_CENTRE | wx.ALL, 5) self.sizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.ALL, 5) if __name__ == "__main__": app = wx.PySimpleApp() # создаём экземпляр мастера wizard = wx.wizard.Wizard(None, -1, "Simple Wizard") # создаём страницы мастера page1 = TitledPage(wizard, "Page 1") page2 = TitledPage(wizard, "Page 2") page3 = TitledPage(wizard, "Page 3") page4 = TitledPage(wizard, "Page 4") page1.sizer.Add(wx.StaticText(page1, -1, "Testing the wizard")) page4.sizer.Add(wx.StaticText(page4, -1, "This is the last page.")) # задаём последовательность страниц wx.wizard.WizardPageSimple_Chain(page1, page2) wx.wizard.WizardPageSimple_Chain(page2, page3) wx.wizard.WizardPageSimple_Chain(page3, page4) # задаём размер мастера wizard.FitToPage(page1) # запускаем мастера if wizard.RunWizard(page1): print "Success"
- Для наполнения мастера мы создаём страницы, которые содержат только фиксированный текст. Вы, скорее всего, захотите добавить сюда ещё какие-то элементы, например, для получения данных от пользователя.
- Функция wx.wizard.WizardPageSimple_Chain() является более простым способом построения последовательности, чем вызов методов SetNext() и SetPrev() страниц, переданных ей в качестве аргументов.
- Вызов FitToSize() устанавливает размер мастера на основании страницы, переданной ему в качестве аргумента, и всех страниц, доступных от неё по цепочке. Поэтому, вызывайте этот метод лишь после того, как установите последовательность страниц.
- Аргументом метода wizard.RunWizard() служит страница, с которой начинается запуск мастера. Причём мастер сам понимает, что надо завершиться, когда он доходит до страницы, для которой не установлена следующая страница. Значение True возвращается только если пользователь прошёл все страницы и нажал в конце «Завершить».
Создание экземпляра wx.wizard.Wizard — первый шаг в использовании мастера. Конструктор класса выглядит так:
wx.wizard.Wizard(parent, id=-1, title=wx.EmptyString, bitmap=wx.NullBitmap, pos=wx.DefaultPosition)
В нашем примере parent, id, title и pos имеют тот же смысл, что и в конструкторе wx.Panel. Если передан аргумент bitmap, то он будет отображаться на каждой странице. Из доступных флагов стиля есть только wx.WIZARD_EX_HELPBUTTON, который отображает кнопку помощи. Это флаг расширенного стиля и его надо устанавливать используя двухступенчатый механизм, описанный в главе 8.
Обычно, для установки размера Вы будете использовать FitToSize(), как в нашем примере, но ничто не мешает Вам задать размер самому с помощью метода SetPageSize(), передав ему в качестве аргумента кортеж или экземпляр wx.Size. Для получения текущего размера используется метод GetPageSize(). В любом случае размер будет использоваться лишь для той части мастера, которая предназначена для отображения страниц, сам мастер будет большего размера (например, из-за кнопок «далее» и «назад» — прим. переводчика).
Контролировать работу мастера можно с помощью его же методов: метод GetCurrentPage() возвращает отображаемую страницу, если же мастер ещё не запущен он вернёт None. Определить, имеет ли текущая страница следующую или предыдущую можно с помощью методов HasNextPage() и HasPrevPage(). Для запуска мастера используется метод RunWizard(), как видно из нашего листинга.
Мастер продуцирует командные события, которые Вы сами можете перехватывать и обрабатывать; они перечислены в таблице ниже. Каждое из этих событий относится к классу wx.wizard.WizardEvent, для которого доступно два метода. GetPage() вернёт нам страницу, на которой было создано событие, а GetDirection() вернёт True, если пользователь движется вперёд по мастеру, и False в другом случае.
Событие | Описание |
---|---|
EVT_WIZARD_CANCEL | Создаётся, когда пользователь нажимает кнопку «отмена». Это событие может быть отменено с помощью метода Veto(). В таком случае диалог не завершит работу. |
EVT_WIZARD_FINISHED | Создаётся, когда пользователь нажимает кнопку «готово» в конце мастера. |
EVT_WIZARD_HELP | Создаётся, когда пользователь нажимает кнопку справки |
EVT_WIZARD_PAGE_CHANGED | Создаётся после смены страницы для постобработки |
EVT_WIZARD_PAGE_CHANGING | Создаётся когда пользователь нажал на кнопку изменения страницы, но страница ещё не изменилась. Это событие так же может быть отменено с помощью Veto(), например, если пользователь заполнил не все поля. |
Класс wx.wizard.WizardPageSimple обрабатывается так же как панель. Конструктор этого класса позволяет Вам сразу установить предыдущую и следующую страницу:
wx.wizard.WizardPageSimple(parent=None, prev=None, next=None)
Опять же, если Вы не хотите задавать их при создании — используйте методы SetPrev() и SetNext(). Если же и с этим у Вас возникают проблемы — Вам поможет функция wx.wizard.WizardPageSimple_Chain(), которая устанавливает взаимосвязь между двумя страницами.
Более сложная версия страниц мастера, wx.wizard.WizardPage, немногим отличается от рассмотренного нами. Но вместо того, чтобы явно устанавливать последовательность страниц, она предоставляет методы, позволяющие определить более сложную логику следования по мастеру. Конструктор класса выглядит так:
wx.WizardPage(parent, bitmap=wx.NullBitmap, resource=None)
Заданный аргумент bitmap переопределяет свой аналог в конструкторе мастера. resource позволяет загрузить страницу из ресурсов wxPython. Для реализации логики следования переопределите методы GetPrev() и GetNext(), чтобы они возвращали то, что надо делать дальше. Обычно это используется в случаях, когда последовательность страниц определяется ответами пользователя.
9.4 Отображение подсказок при запуске
Многие программы используют такие подсказки чтобы сообщить пользователям о тех возможностях, о которых иначе можно было бы и не узнать. wxPython предоставляет простой способ создания таких подсказок. Пример и код такого окна приведён на рисунке 9.12 и листинге 9.12 соответственно.
рис 9.12
Листинг 9.12
import wx if __name__ == "__main__": app = wx.PySimpleApp() provider = wx.CreateFileTipProvider("tips.txt", 0) wx.ShowTip(None, provider, True)
У нас есть две функции, управляющие такими советами. Первая создаёт wx.TipProvider:
wx.CreateFileTipProvider(filename, currentTip)
filename — имя файла, содержащего эти советы. currentTip — индекс отображаемого совета (нумерация идёт с 0). Приложение само должно хранить эту информацию между запусками.
Файл с советами — это простой текстовый файл, где каждый совет занимает ровно одну строчку. Пустые линии пропускаются, так же как и линии, начинающиеся с #. Вот пример содержания такого файла:
Создавать советы очень легко.
Feel the force, Luke.
Поставщик советов (tip provider) является экземпляром класса wx.PyTipProvider. Если Вам нужно больше функциональности, Вы можете определить свой подкласс класса wx.TipProvider и переопределить его метод GetTip().
За отображение советов ответственна функция wx.ShowTip().
wx.ShowTip(parent, tipProvider, showAtStartup)
parent — родительское окно, при наличии, а tipProvider — это то, что мы создали на предыдущем шаге. showAtStartup отвечает за то, стоит ли галочка в чекбоксе «показывать при старте», но при этом она не следит, отказался ли пользователь от них — это Вы должны проверить сами. Функция возвращает значение этого чекбокса, так что Вы можете использовать его при следующем запуске вашего приложения, если, конечно, сохраните это значение.
Добро пожаловать на wxPython! | wxPython
Начиная с этого выпуска, wxPython перешел на отслеживание wxWidgets.
главная ветка (версия 3.1.x) для исходного кода wxWidgets, которым является wxPython.
построенный на основе, и который включен в исходные архивы wxPython.
Это будет последний выпуск, включающий двоичные файлы для Python 2.7. Код будет
вероятно, еще какое-то время будет компилироваться и быть совместимым с Python 2.7, но нет
будут приложены усилия, чтобы так и было.
Добавьте образец для wx.Font.AddPrivateFont к демонстрации.
Добавлены оболочки для OSXEnableAutomaticQuoteSubstitution,
OSXEnableAutomaticDashSubstitution и OSXDisableAllSmartSubstitutions
методы в wx.TextCtrl. Также добавлен OSXEnableAutomaticTabbing в wx.App.
Добавлены wx.ColourDialogEvent, wx.DCTextBgColourChanger, wx.DCTextBgModeChanger,
wx.grid.GridCellDateRenderer, wx.grid.GridCellDateEditor, wx.SystemAppearance,
пр.
Многие устаревшие элементы в wxWidgets и wxPython используются или имеют
был удален.Обязательно протестируйте свой код в последней версии 4.0.x с помощью
предупреждения включены, чтобы вы могли видеть, какие вызовы класса, метода или функции вам нужны
изменить.
Исправлены ошибки в wx.lib.calendar: теперь есть навигация по клавишам через границы месяцев.
возможный; клавиша навигации теперь устанавливает дату и запускает событие EVT_CALENDAR;
API-интерфейсы setter теперь правильно устанавливают дату # 1230.
Переключитесь на использование wx.Overlay в инструменте проверки виджетов, чтобы выделить
виджеты при работе через порт GTK3.
Исправлена проблема в wx.lib.agw.customtreectrl, из-за которой редактор меток мог остаться
застрял навсегда # 1235.
Привит к методу EnableSystemTheme классам, которые его поддерживают. Этот
может использоваться для отключения системной темы по умолчанию в Windows для собственных виджетов
как wx.ListCtrl, wx.TreeCtrl и wx.dataview.DataViewCtrl. Не имеет никакого эффекта
на других платформах.
Флаг расширенного стиля wx.WS_EX_VALIDATE_RECURSIVELY устарел, так как
теперь поведение по умолчанию (и единственное).Флаг стиля был добавлен обратно в
wxPython для совместимости, но с нулевым значением. Вы можете просто перестать его использовать
в вашем коде без изменения поведения. # 1278
Исправить иногда сбой при использовании wx.Overlay, позволяя wx.DCOverlay удерживать
ссылка на DC, чтобы гарантировать, что DCOverlay будет уничтожен первым.
PR № 1301
Заменены виртуальные машины Vagrant, используемые для сборки wxPython для различных дистрибутивов Linux.
с образами Docker.
Добавьте недостающие методы в wx.adv.BitmapComboBox # 1307
Добавлен пакет wx.svg, содержащий код для синтаксического анализа SVG (масштабируемый вектор
Graphics), а также код для интеграции с wxPython. Он может растрировать
SVG в wx.Bitmap любого размера без потери качества, а также
рендеринг SVG непосредственно в wx.GraphicsContext с использованием чертежа сборщика мусора
примитивы. PR № 1323
Портировал образец внедрения из Classic, в котором показано, как использовать wxPython из
приложение C ++ wxWidgets, в которое встроен Python.PR № 1353
Исправлен wx.GetApp () для использования глобального экземпляра wxApp от wxWidgets вместо
поддерживая свой собственный указатель. Таким образом, если wxApp создается кодом C ++
wxPython по-прежнему сможет получить к нему доступ. # 1126
Добавлены оболочки для класса wx.ActivityIndicator.
Добавлены оболочки для класса wx.CollapsibleHeaderCtrl.
Исправлены проблемы в PlotCanvas, связанные с отображением и использованием полос прокрутки.# 1428
Добавлен wx.msw.CHMHelpController, а также фабричная функция wx.HelpController.
который создает экземпляр лучшего Help Controller для платформы. # 1536
Добавлен wx.adv.GenericAnimationCtrl, поэтому общая версия классов анимации
может использоваться даже на платформах, у которых есть собственная версия. Обратите внимание, что из-за
внутренние изменения для поддержки обоих типов анимации, некоторые изменения API в том, как
Анимационные объекты созданы.См. Пример AnimationCtrl.py в демонстрации
для различных схем использования # 1579
Добавлены оболочки для wx.grid.GridBlockCoords, wx.grid.GridBlocks и
wx.grid.GridBlockDiffResult, а также связанные новые методы в
wx.grid.Grid класс. Они предоставляют новый способ взаимодействия с блоками
выбранные ячейки, включая интерфейс итератора в wx.grid.GridBlocks, который
должен быть более эффективным (по времени и памяти) способом обработки больших групп
выбор.
новостей wxPython | wxPython
Начиная с этого выпуска, wxPython перешел на отслеживание wxWidgets.
главная ветка (версия 3.1.x) для исходного кода wxWidgets, которым является wxPython.
построенный на основе, и который включен в исходные архивы wxPython.
Это будет последний выпуск, включающий двоичные файлы для Python 2.7. Код будет
вероятно, еще какое-то время будет компилироваться и быть совместимым с Python 2.7, но нет
будут приложены усилия, чтобы так и было.
Добавьте образец для wx.Font.AddPrivateFont к демонстрации.
Добавлены оболочки для OSXEnableAutomaticQuoteSubstitution,
OSXEnableAutomaticDashSubstitution и OSXDisableAllSmartSubstitutions
методы в wx.TextCtrl. Также добавлен OSXEnableAutomaticTabbing в wx.App.
Добавлены wx.ColourDialogEvent, wx.DCTextBgColourChanger, wx.DCTextBgModeChanger,
wx.grid.GridCellDateRenderer, wx.grid.GridCellDateEditor, wx.SystemAppearance,
пр.
Многие устаревшие элементы в wxWidgets и wxPython используются или имеют
был удален.Обязательно протестируйте свой код в последней версии 4.0.x с помощью
предупреждения включены, чтобы вы могли видеть, какие вызовы класса, метода или функции вам нужны
изменить.
Исправлены ошибки в wx.lib.calendar: теперь есть навигация по клавишам через границы месяцев.
возможный; клавиша навигации теперь устанавливает дату и запускает событие EVT_CALENDAR;
API-интерфейсы setter теперь правильно устанавливают дату # 1230.
Переключитесь на использование wx.Overlay в инструменте проверки виджетов, чтобы выделить
виджеты при работе через порт GTK3.
Исправлена проблема в wx.lib.agw.customtreectrl, из-за которой редактор меток мог остаться
застрял навсегда # 1235.
Привит к методу EnableSystemTheme классам, которые его поддерживают. Этот
может использоваться для отключения системной темы по умолчанию в Windows для собственных виджетов
как wx.ListCtrl, wx.TreeCtrl и wx.dataview.DataViewCtrl. Не имеет никакого эффекта
на других платформах.
Флаг расширенного стиля wx.WS_EX_VALIDATE_RECURSIVELY устарел, так как
теперь поведение по умолчанию (и единственное).Флаг стиля был добавлен обратно в
wxPython для совместимости, но с нулевым значением. Вы можете просто перестать его использовать
в вашем коде без изменения поведения. # 1278
Исправить иногда сбой при использовании wx.Overlay, позволяя wx.DCOverlay удерживать
ссылка на DC, чтобы гарантировать, что DCOverlay будет уничтожен первым.
PR № 1301
Заменены виртуальные машины Vagrant, используемые для сборки wxPython для различных дистрибутивов Linux.
с образами Docker.
Добавьте недостающие методы в wx.adv.BitmapComboBox # 1307
Добавлен пакет wx.svg, содержащий код для синтаксического анализа SVG (масштабируемый вектор
Graphics), а также код для интеграции с wxPython. Он может растрировать
SVG в wx.Bitmap любого размера без потери качества, а также
рендеринг SVG непосредственно в wx.GraphicsContext с использованием чертежа сборщика мусора
примитивы. PR № 1323
Портировал образец внедрения из Classic, в котором показано, как использовать wxPython из
приложение C ++ wxWidgets, в которое встроен Python.PR № 1353
Исправлен wx.GetApp () для использования глобального экземпляра wxApp от wxWidgets вместо
поддерживая свой собственный указатель. Таким образом, если wxApp создается кодом C ++
wxPython по-прежнему сможет получить к нему доступ. # 1126
Добавлены оболочки для класса wx.ActivityIndicator.
Добавлены оболочки для класса wx.CollapsibleHeaderCtrl.
Исправлены проблемы в PlotCanvas, связанные с отображением и использованием полос прокрутки.# 1428
Добавлен wx.msw.CHMHelpController, а также фабричная функция wx.HelpController.
который создает экземпляр лучшего Help Controller для платформы. # 1536
Добавлен wx.adv.GenericAnimationCtrl, поэтому общая версия классов анимации
может использоваться даже на платформах, у которых есть собственная версия. Обратите внимание, что из-за
внутренние изменения для поддержки обоих типов анимации, некоторые изменения API в том, как
Анимационные объекты созданы.См. Пример AnimationCtrl.py в демонстрации
для различных схем использования # 1579
Добавлены оболочки для wx.grid.GridBlockCoords, wx.grid.GridBlocks и
wx.grid.GridBlockDiffResult, а также связанные новые методы в
wx.grid.Grid класс. Они предоставляют новый способ взаимодействия с блоками
выбранные ячейки, включая интерфейс итератора в wx.grid.GridBlocks, который
должен быть более эффективным (по времени и памяти) способом обработки больших групп
выбор.
wx wx.adv wx.grid wx.dataview wx.richtext wx.ribbon wx.html wx.html2 wx.aui wx.svg | wx.lib wx.glcanvas wx.stc wx.msw wx.media wx.propgrid wx.xrc wx.xml wx.py wx.tools функций |
Загрузки wxPython | wxPython
Текущая версия
Начиная с wxPython 4.0 (первый выпуск Phoenix) исходный код wxPython
архив, а для поддерживаемых платформ доступны бинарные колеса wxPython
из индекса пакетов Python (PyPI). Страница проекта wxPython в PyPI:
https://pypi.org/project/wxPython.
Исходный код или бинарные колеса можно скачать прямо из проекта.
страницу, или вы можете использовать замечательный пип
инструмент, чтобы сделать это за вас.
Windows и macOS
pip install -U wxPython
Если вы используете Windows или macOS с совместимой сборкой Python, то
показанная выше команда загрузит соответствующий файл колеса из
последний выпуск и установите его в активную среду Python или виртуальную
среда.
Если для вашей платформы или для вашей
версии Python, тогда pip загрузит исходный архив и будет
попытаться построить это для вас.Ниже приводится некоторая информация об этом.
Да, у нас есть Linux Wheels. Вроде.
Из-за различий между дистрибутивами Linux (в основном разные
версии основных библиотек, установленных по умолчанию, а также платформа
архитектура и т. д.) невозможно разместить двоичные файлы колес для
Linux на PyPI, если их нельзя заставить работать в рамках ограничений
PEP 513 К сожалению,
попытки втиснуть привязку wxPython в отверстие manylinux1
не были
очень успешный.Может быть, manylinux2
подойдет лучше. В это время,
если у вас есть Linux, достаточно похожий на те, которые использовались для сборки колес
расположен под
папка linux wxPython Extras,
тогда вы можете использовать их, и вам не нужно будет строить колеса самостоятельно.
Поскольку существуют различные варианты дистрибутива и порта wx (GTK2 или GTK3), то
не все файлы могут быть расположены в одной папке для легкого доступа через pip.
Это просто означает, что вам нужно немного углубиться, чтобы
найдите URL-адрес, который нужно передать пипу.Например, чтобы получить сборки GTK3 wxPython
для Ubuntu 16.04 (и 16.10, LinuxMint 18 и, возможно, других) вы можете использовать
команда pip вроде этого:
pip install -U \ -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-16.04 \ wxPython
Конечно, вы всегда можете скачать файл wheel самостоятельно, а затем использовать pip
для установки вашей локальной копии файла.
Здание с каналом
Если pip не может найти двоичный файл колеса, соответствующий вашей платформе
и вашу версию Python, тогда он загрузит исходный архив и
попытается построить его для вас.Если у вас есть необходимый компилятор и
зависимые библиотеки, то это будет приемлемый подход для
вы, хотя сборка может занять некоторое время. Конечный результат будет
так же, как если бы вам было доступно двоичное колесо. На самом деле пип может
также скажите просто построить колесо, а не делать установку. Таким образом вы
может повторно использовать файл колеса для разных сред Python или других
машины или что-то еще, без необходимости перестраивать каждую из них.
Инструкции по созданию файла колеса wxPython для вашего Linux.
машина и установка Python, обратитесь к этому
разместить в блоге.
Conda или Anaconda
Если вы используете среду Python под управлением Conda или
Anaconda, затем вы можете установить wxPython с помощью
conda
, как и любой другой пакет. Проверять
здесь для подробностей о том, что такое сборки
доступный. Прекрасные люди из Conda-forge сделали
хорошая работа по поддержанию его в курсе новых выпусков.
Одна маленькая gotcha , о которой нужно знать при сборке wxPython conda, заключается в том, что на
OSX / macOS вам нужно будет использовать pythonw
для выполнения ваших приложений wxPython,
не типичная команда python
.Чтобы использовать pythonw
, вам необходимо установить
python.app
пакет от conda.
Дополнительные файлы
Помимо исходного кода и двоичных файлов, доступных на PyPI, есть несколько
дополнительные файлы, которые являются частью каждого выпуска, которые размещены на
https://extras.wxPython.org/wxPython4/extras/.
Вы найдете там:
Архив, содержащий документацию wxPython API , которая является
тот же контент доступен по адресу https: // docs.wxpython.org. Вы можете использовать это
копия справочной документации для локального автономного чтения справочника API
материал. Найдите файл с именемwxPython-docs-VERSION.tar.gz
.Архив, содержащий демо-версию wxPython и образцы . Это очень
рекомендуется для новых пользователей wxPython, а также для опытных пользователей загрузить
этот файл. Это отличный учебный ресурс с множеством примеров, показывающих
как использовать различные компоненты библиотеки wxPython.Искать файл
с именемwxPython-demo-VERSION.tar.gz
.Zip-файлов с
* .pdb
файлами, которые являются файлами информации отладчика Visual Studio.Файлы двоичного колеса для нескольких разновидностей Linux .
Кровавая кромка
Если вы смельчак и предпочитаете работать с новейшими
версия wxPython, у нас есть для вас несколько вариантов.
Снимок сборки
Каждый день, когда происходят коммиты основной ветки wxPython Phoenix,
buildbot будет пытаться делать «ежедневный
строить».В случае успеха полученные колеса, документы и исходные архивы
будет загружен в
папка со снимками.
Хотя это технически не официальные релизы и могут быть новые
неоткрытые и нерешенные ошибки, ими пользуются несколько человек
успешно в собственных проектах.
GitHub
Проект GitHub
wxPython находится по адресу https://github.com/wxWidgets/Phoenix. Если
вы хотите повозиться с кодом (желательно, чтобы отправить
PR) то этот вариант какой
ты ищешь.Создайте вилку и клонируйте копию репозитория git для
себя и начни щипать под капотом.
Поскольку сгенерированные файлы не сохраняются в git, вам нужно будет перейти
выполнить еще несколько шагов для генерации и построения кода, но все они
обрабатывается
build.py
скрипт и обзор процесса и необходимых шагов в
ПРОЧТИ МЕНЯ. Если
вы застряли, тогда вы можете спросить об этом на
wxPython-dev.
Старые версии
wxPython выпускает до 4.0 (он же «классический» wxPython) останется
доступны на
SourceForge.
Это включает исходный код, документацию, демонстрацию и различные двоичные файлы.
установщики для систем Windows и Mac.
Python 3 GUI: wxPython 4 Tutorial — Urllib & JSON Example
В этом руководстве по wxPython 4 мы научимся создавать приложение с графическим интерфейсом Python 3 с нуля, используя wxPython и Urllib. Мы будем использовать сторонний REST API новостей, доступный на newsapi.org, который предоставляет заголовки последних новостей и позволяет искать статьи из более чем 30 000 источников новостей и блогов по всему миру.Мы будем использовать Urllib для отправки HTTP-запросов в REST API и модуль json
для анализа ответа.
Из этого руководства вы узнаете, как создавать пользовательские интерфейсы рабочего стола в Python 3, включая добавление виджетов и управление данными. Более подробно вы увидите:
- Как использовать Urllib для отправки HTTP-запросов для получения данных JSON из стороннего REST API.
- Как использовать модуль
json
для синтаксического анализа данных JSON в словарях Python 3. - Как использовать модуль
webbrowser
для открытия URL-адресов в веб-браузере по умолчанию.
Прежде всего, перейдите на страницу регистрации и создайте новую учетную запись, затем обратите внимание на предоставленный ключ API, который будет использоваться позже для доступа к данным новостей.
Что такое wxPython
wxPython — это оболочка Python для wxWidgets — кроссплатформенной библиотеки C ++ для создания настольных приложений для macOS, Linux и Windows. wxPython был создан Робином Данном .
Предварительные требования
Вам потребуются следующие предварительные требования:
- Python 3 и pip, установленные в вашей системе,
- Базовые знания Python.
Установка wxPython 4
Начнем с установки wxPython 4 с помощью pip
. Откройте новый терминал и просто выполните следующую команду:
Если установка не удалась, вам могут потребоваться некоторые зависимости в зависимости от вашей операционной системы. Ознакомьтесь с разделом предварительных требований в официальном репозитории GitHub для получения дополнительной информации.
Создание вашего первого окна графического интерфейса пользователя wxPython 4
После установки wxPython вы можете легко создать свое первое окно графического интерфейса пользователя, создав отдельный файл Python и вызвав методы wx.App ()
и wx.Frame ()
.
Внутри вашей рабочей папки создайте файл newsy.py
и добавьте следующий код:
import wx
app = wx.App ()
frame = wx.Frame (parent = None, title = 'Newsy: Читайте мировые новости!')
frame.Show ()
app.MainLoop ()
В этом примере мы используем два основных класса — wx.Приложение
и wx.Frame
.
Класс wx.App
используется для создания экземпляра объекта приложения wxPython.
Из объекта wx.App
вы можете вызвать метод MainLoop ()
, который запускает цикл событий, который используется для прослушивания событий в вашем приложении.
wx.Frame
используется для создания окна. В нашем примере мы создали окно без родителя с заголовком Newsy: Read the World News! титул.
Теперь запустите приложение с графическим интерфейсом пользователя, используя следующую команду на своем терминале:
Это снимок экрана нашего окна графического интерфейса:
Давайте проведем рефакторинг нашего кода и создадим меню и строки состояния.Сначала мы создаем класс MainWindow
, который расширяет класс wx.Frame
:
класс MainWindow (wx.Frame):
def __init __ (я, родитель, заголовок):
super (MainWindow, self) .__ init __ (родительский, заголовок = заголовок, размер = (600,500))
self.Centre ()
self.CreateStatusBar ()
self.createMenu ()
def createMenu (сам):
меню = wx.Menu ()
menuExit = menu.Append (wx.ID_EXIT, «E & xit», «Выйти из приложения»)
menuBar = wx.MenuBar ()
строка меню.Добавить (меню, «& Файл»)
self.SetMenuBar (панель меню)
self.Bind (wx.EVT_MENU, self.OnExit, menuExit)
def OnExit (себя, событие):
self.Close (True) # Закрываем фрейм
В методе __init __ ()
мы вызываем метод Center ()
для wx.Frame
, чтобы центрировать окно на экране. Затем мы вызываем метод CreateStatusBar ()
для создания строки состояния. Наконец, мы определяем и вызываем метод createMenu ()
, который:
- Создает меню с помощью
wx.Menu ()
метод, - Добавляет элемент меню для выхода из приложения,
- Создает строку меню и добавляет к ней меню File, ,
- Связывает
EVT_MENU
с методомOnExit ()
, который просто вызывает методClose ()
, чтобы закрыть окно.
Затем измените код для создания приложения следующим образом:
if __name__ == '__main__':
app = wx.App ()
window = MainWindow (Нет, «Newsy - читайте мировые новости!»)
окно.Шоу()
app.MainLoop ()
После запуска приложения это скриншот нашего окна на данный момент:
Добавление панели wxPython
Согласно документации:
Панель — это окно, в котором размещаются элементы управления. Обычно его помещают в рамку. Его основная функция по сравнению с родительским классом wx.Window — это код для обработки дочерних окон и обхода
TAB
, который реализован изначально, если это возможно (например, в wxGTK), или самим wxWidgets в противном случае.
Теперь давайте создадим панель под названием NewsPanel
, которая расширяет wxPanel
:
class NewsPanel (wx.Panel):
def __init __ (я, родитель):
wx.Panel .__ init __ (сам, родитель)
self.SetBackgroundColour ("серый")
Затем давайте создадим экземпляр класса в конструкторе MainWindow
для фактического добавления панели в наше окно:
class MainWindow (wx.Frame):
def __init __ (я, родитель, заголовок):
super (MainWindow, сам).__init __ (родитель, заголовок = заголовок, размер = (600,500))
self.Centre ()
NewsPanel (самостоятельно)
self.createStatusBar ()
self.createMenu ()
Добавление списков wxPython для новостей и источников
Согласно документации:
Элемент управления списком представляет списки в нескольких форматах: представление списка, представление отчета, представление значков и представление небольших значков.
В любом случае элементы нумеруются с нуля. Для всех этих режимов элементы хранятся в элементе управления и должны быть добавлены к нему с помощьюwx.ListCtrl.InsertItem
метод.
После создания нашей панели давайте добавим два списка, которые будут содержать источники и новости:
class NewsPanel (wx.Panel):
def __init __ (я, родитель):
wx.Panel .__ init __ (сам, родитель)
self.SetBackgroundColour ("серый")
self.sources_list = wx.ListCtrl (
себя,
style = wx.LC_REPORT | wx.BORDER_SUNKEN
)
self.sources_list.InsertColumn (0, «Источник», ширина = 200)
себя.news_list = wx.ListCtrl (
себя,
размер = (-1, - 1),
style = wx.LC_REPORT | wx.BORDER_SUNKEN
)
self.news_list.InsertColumn (0, 'Ссылка')
self.news_list.InsertColumn (1, 'Заголовок')
Мы используем wx.ListCtrl
для создания списка в wxPython, затем мы вызываем метод InsertColumn ()
для добавления столбцов в наши списки. В наш первый список мы добавляем только один столбец Источник . Для вторичных списков мы добавляем два столбца Link и Title .
Создание макета с помощью Box Sizer
Согласно документам:
Sizers … стали методом выбора для определения макета элементов управления в диалогах в wxPython из-за их способности создавать визуально привлекательные диалоги независимо от платформу с учетом различий в размере и стиле отдельных элементов управления.
Теперь давайте разместим два списка рядом, используя макет BoxSizer
. wxPython обеспечивает абсолютное позиционирование, а также расширенные алгоритмы компоновки, такие как:
- wx.BoxSizer
- wx.StaticBoxSizer
- wx.GridSizer
- wx.FlexGridSizer
- wx.GridBagSizer
wx.BoxSizer
позволяет размещать несколько виджетов в столбце строки или столбца.
коробка = wx.BoxSizer (wx.VERTICAL | wx.HORIZONTAL)
Ориентация может быть Ш x ВЕРТИКАЛЬНАЯ
или Ш x ГОРИЗОНТАЛЬНАЯ
.
Вы можете добавить виджеты в wx.BoxSizer
с помощью метода Add ()
:
.Добавить (wx.Window окно, целочисленная пропорция = 0, целочисленный флаг = 0, целочисленная граница = 0)
В методе __init __ ()
нашей панели новостей добавьте следующий код:
sizer = wx.BoxSizer (wx.HORIZONTAL)
sizer.Add (self.sources_list, 0, wx.ALL | wx.EXPAND)
sizer.Add (self.news_list, 1, wx.ALL | wx.EXPAND)
self.SetSizer (классификатор)
Это снимок экрана нашего окна с двумя списками:
Давайте теперь начнем с заполнения исходного списка.Сначала импортируйте следующие модули:
import urllib.request
импортировать json
Затем определите переменную API_KEY
, которая будет содержать ваш ключ API, который вы получили после создания учетной записи с NewsAPI.org
:
Получение данных JSON с использованием Urllib.request
Затем в NewsPanel
добавьте метод получения источников новостей:
def getNewsSources (self):
с urllib.request.urlopen ("https: // newsapi.org / v2 / sources? language = en & apiKey = "+ API_KEY) в качестве ответа:
response_text = response.read ()
кодировка = response.info (). get_content_charset ('utf-8')
JSON_object = json.loads (response_text.decode (кодировка))
для el в JSON_object ["sources"]:
print (el ["описание"] + ":")
print (el ["id"] + ":")
print (el ["url"] + "\ n")
self.sources_list.InsertItem (0, el ["имя"])
Затем вызовите метод в конструкторе:
class NewsPanel (wx.Панель):
def __init __ (я, родитель):
wx.Panel .__ init __ (сам, родитель)
# [...]
self.getNewsSources ()
Вот и все! Если вы снова запустите приложение, вы должны увидеть список источников новостей:
Теперь, когда мы выбираем источник новостей из списка слева, мы хотим, чтобы новости из этого источника отображались в списке в Правильно. Сначала нам нужно определить метод для получения данных новостей. В NewsPanel
добавьте следующий метод:
def getNews (self, source):
с urllib.request.urlopen ("https://newsapi.org/v2/top-headlines?sources=" + source + "& apiKey =" + API_KEY) в качестве ответа:
response_text = response.read ()
кодировка = response.info (). get_content_charset ('utf-8')
JSON_object = json.loads (response_text.decode (кодировка))
для el в JSON_object ["статьи"]:
индекс = 0
self.news_list.InsertItem (index, el ["url"])
self.news_list.SetItem (индекс, 1, el ["название"])
индекс + = 1
Далее нам нужно вызвать этот метод при выборе источника.А вот роль событий wxPython.
Привязка событий wxPython
В конструкторе __init __ ()
объекта NewsPanel
вызовите метод Bind ()
в объекте sources_list
, чтобы привязать wx.EVT_LIST_ED70SELECT
к событию wx.EVT_LIST_ITEM_Slected ()
метод:
« ру
class NewsPanel (wx.Panel):
def __init __ (self, parent):
wx.Panel .__ init __ (сам, родитель)
# [...]
self.sources_list.Привязать (wx.EVT_LIST_ITEM_SELECTED, self.OnSourceSelected)
Затем определите метод OnSourceSelected () следующим образом:
`` ру
def OnSourceSelected (я, событие):
source = event.GetText (). replace ("", "-")
self.getNews (источник)
Теперь запустите приложение и выберите источник новостей, вы должны получить список новостей из выбранного источника в правом списке:
Открыть внешние URL-адреса в веб-браузерах
Теперь мы хотим иметь возможность откройте новостную статью, если она выбрана, в веб-браузере, чтобы прочитать статью полностью.Сначала импортируйте модуль webbrowser
:
Затем в NewsPanel
определите метод OnLinkSelected ()
следующим образом:
def OnLinkSelected (self, event):
webbrowser.open (event.GetText ())
Наконец, привяжите метод к wx.EVT_LIST_ITEM_SELECTED
в news_list
объект:
class NewsPanel (wx.Panel):
def __init __ (я, родитель):
wx.Panel .__ init __ (сам, родитель)
# [...]
self.news_list.Bind (wx.EVT_LIST_ITEM_SELECTED, self.OnLinkSelected)
Теперь, когда вы выбираете новость, соответствующий URL-адрес открывается в вашем веб-браузере по умолчанию, чтобы вы могли прочитать статью полностью.
Изменение размера списков при изменении размера окна
Если вы измените размер окна, вы заметите, что размеры списков не изменились соответствующим образом. Вы можете изменить это поведение, добавив следующий метод в NewsPanel и привязав его к событию wx.EVT_PAINT
:
def OnPaint (self, evt):
ширина, высота = self.news_list.GetSize ()
для i в диапазоне (2):
self.news_list.SetColumnWidth (я, ширина / 2)
evt.Skip ()
Затем привяжите метод следующим образом:
class NewsPanel (wx.Panel):
def __init __ (я, родитель):
wx.Panel .__ init __ (сам, родитель)
# [...]
self.Bind (wx.EVT_PAINT, self.OnPaint)
Это полный код:
Заключение
В этом руководстве мы увидели, как разработать графический интерфейс для настольных ПК с помощью Python 3 и wxPython.Мы также видели:
- Как использовать Urllib для отправки HTTP-запросов для получения данных JSON из стороннего REST API.
- Как использовать модуль json для синтаксического анализа данных JSON в словарях Python 3.
- Как использовать модуль
webbrowser
для открытия URL-адресов в веб-браузере по умолчанию.
Мы также узнали, как использовать wxPython для создания окон, панелей и списков и как отслеживать события.
wxPython · PyPI
Описание проекта
Добро пожаловать в проект Phoenix wxPython! Phoenix — это улучшенное новое поколение
wxPython, «лучше, сильнее, быстрее, чем был раньше.”Этот новый
реализация ориентирована на повышение скорости, ремонтопригодности и
расширяемость. Как и «классический» wxPython, Phoenix оборачивает wxWidgets на C ++.
инструментарий и обеспечивает доступ к частям пользовательского интерфейса wxWidgets
API, позволяющий приложениям Python иметь собственный графический интерфейс на Windows, Mac или
Системы Unix, с естественным внешним видом и требующие очень небольшого количества (если таковые имеются)
код конкретной платформы.
Для получения дополнительной информации см.
README файл,
Руководство по миграции,
или документацию по API wxPython.
Архивные файлы, содержащие копию документации wxPython, демонстрацию и
доступны образцы, а также набор файлов MSVC .pdb для Windows.
здесь.
Утилиты wxdocs и wxdemo загрузят соответствующие файлы с помощью wxget,
(при необходимости), распаковать их, (при необходимости) и запустить соответствующую версию
соответствующие элементы. (Документы запускаются в браузере по умолчанию, и запускается демонстрация.
с питоном).
Скачать файлы
Загрузите файл для своей платформы.Если вы не уверены, что выбрать, узнайте больше об установке пакетов.
Имя файла, размер | Тип файла | Версия Python | Дата загрузки | Хэшей |
---|---|---|---|---|
Имя файла, размер wxPython-4.1.1-cp36-cp36m-macosx_10_9_x86_64.whl (18,2 МБ) | Тип файла Колесо | Версия Python cp36 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp36-cp36m-win32.whl (15,1 МБ) | Тип файла Колесо | Версия Python cp36 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp36-cp36m-win_amd64.whl (18,2 МБ) | Тип файла Колесо | Версия Python cp36 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp37-cp37m-macosx_10_9_x86_64.whl (18,2 МБ) | Тип файла Колесо | Версия Python cp37 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp37-cp37m-win32.whl (15,1 МБ) | Тип файла Колесо | Версия Python cp37 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp37-cp37m-win_amd64.whl (18,2 МБ) | Тип файла Колесо | Версия Python cp37 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp38-cp38-macosx_10_9_x86_64.whl (18,1 МБ) | Тип файла Колесо | Версия Python cp38 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp38-cp38-win32.whl (15,1 МБ) | Тип файла Колесо | Версия Python cp38 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp38-cp38-win_amd64.whl (18,1 МБ) | Тип файла Колесо | Версия Python cp38 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp39-cp39-macosx_10_10_x86_64.whl (18,1 МБ) | Тип файла Колесо | Версия Python cp39 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp39-cp39-win32.whl (15,1 МБ) | Тип файла Колесо | Версия Python cp39 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1-cp39-cp39-win_amd64.whl (18,1 МБ) | Тип файла Колесо | Версия Python cp39 | Дата загрузки | Хеши Вид |
Имя файла, размер wxPython-4.1.1.tar.gz (66,0 МБ) | Тип файла Источник | Версия Python Никто | Дата загрузки | Хеши Вид |
wxpython — Начало работы с wxpython
Что такое wxPython
Проще говоря, wxPython — это набор привязок к кроссплатформенной GUI-библиотеке wxWidgets C ++.
Хорошо, что такое wxWidgets
Библиотека wxWidgets предоставляет бесплатный, бесплатный набор абстракций с открытым исходным кодом для различных элементов графического интерфейса, так что нативные элементы управления по-прежнему используются там, где они доступны, с сохранением нативного внешнего вида, ощущений и скорости. Таким образом, он предоставляет абстракцию для создания графического интерфейса пользователя и ряда других утилит в платформе, которая позволяет разработчикам создавать приложения для Windows, Mac OS X, Linux и других платформ с использованием единой базы кода. wxWidgets был запущен в 1992 году, и вы можете увидеть подробную историю здесь.Библиотека wxWidgets распространяется под лицензией wxWindows, которая основана на лицензии L-GPL , но с исключением пункта . Предложение об исключении позволяет вам динамически или статически связать ваше приложение с wxWidgets без требования распространять исходный код для вашего собственного приложения. Другими словами, вы можете использовать wxWidgets либо для бесплатных, либо для коммерческих проектов по цене бесплатно . Лицензия поощряет вас возвращать улучшения, которые вы вносите в саму библиотеку wxWidgets.
Основные моменты, отмечают, что wxWidgets состоит из сотен классов для разработки кроссплатформенных приложений. :
- Макет окна с использованием калибров
- Контексты устройств (вместе с перьями, кистями и шрифтами)
- Комплексная система обработки событий
- Средство просмотра HTML-справки
- Воспроизведение звука и видео
- Поддержка Unicode и интернационализации
- Архитектура документа / представления
- Типография Archiecture
- Розетки
- Многопоточность
- Манипуляции с файлами и каталогами
- Интерактивная и контекстно-зависимая справка
- Рендеринг HTML
- Базовые контейнеры
- Загрузка, сохранение, рисование и обработка изображений
- Библиотека даты и времени и таймеры
- Обработка ошибок
- Буфер обмена и перетаскивание
Обратите внимание, что некоторые из этих объектов, e.грамм. threading, на самом деле не связаны с графическим интерфейсом пользователя, но предоставляют полезную кросс-платформенную абстракцию, так что, например, в случае потоковой передачи один набор кода приложения будет работать на любой поддерживаемой платформе.
В течение многих лет библиотека wxWidgets производила 4 отдельных сборки, в дополнение к отладочным сборкам из одного набора исходного кода, статические и динамические библиотеки, созданные как для ASCII, так и для Unicode. Обычно он доступен предварительно собранным в наиболее распространенных вариантах и в виде исходного кода для сборки с различными параметрами для целевой среды и с цепочкой инструментов C ++ разработчика с многочисленными поддерживаемыми цепочками инструментов.
Привязки python для этой библиотеки и некоторые дополнения образуют wxPython.
Вернуться к тому, что такое wxPython, (что он мне дает)?
wxPython дает разработчику возможность воспользоваться кроссплатформенной библиотекой графического интерфейса с четкой лицензией, а также дает преимущества Python. Подобно wxWidgets и Python, wxPython является бесплатным, бесплатным и открытым исходным кодом, и доступен для использования и распространения как в бесплатных, так и в коммерческих проектах без необходимости распространения исходного кода .
- Full GUI Suite, включая (но не ограничиваясь):
- Windows (включая MDI Windows)
- Мастера
- Рамы и мини-рамы
- Диалоги, стандартные, расширенные и специальные
- Элементы управления просмотром книг, деревьев, сеток и данных
- Датчики, слайдеры, счетчики, анимация, буфер обмена, перетаскивание
- Поддержка HTML, PDF и просмотра изображений
- GUI можно позиционировать абсолютно, но настоятельно рекомендуется использовать макет на основе сайзера, который поддерживает автоматическое изменение размера и т. Д.
Компоненты
- Cross Platform — Поддержка графических интерфейсов пользователя для Windows, OS-X и Linux с единой базой кода без условных операторов в вашем коде
- Родная скорость, внешний вид и ощущения.
- Rapid prototype, test & debug — помните, что это python
- Запускать и редактировать образцы практически всего в демонстрационном пакете.
- Четкая лицензия для бесплатного использования даже в коммерческих продуктах.
- При необходимости ваш графический интерфейс python может быть преобразован в графический интерфейс C ++ wxWidgets позже, поскольку он уже использует его.
- Большое, активное и полезное сообщество пользователей и разработчиков как в StackOverflow, так и в списках рассылки.
Обратите внимание, что там, где сам python предоставляет кроссплатформенный механизм для реализации служебных функций wxWidgets, threading снова является хорошим примером , намеренно опущен из wxPython.
wxPython также имеет очень большой набор демонстраций, которые можно запускать, тестировать и редактировать из пакета Documents and Demo.
Вкусы wxPython
ASCII против Unicode :
В течение многих лет , как и wxWidgets , разработчикам приходилось выбирать между сборками ASCII и Unicode, а также им требовалась сборка для своей конкретной версии python, а также варианты 32/64 бит. Начиная примерно с wxPython 2.8.9 сборка wxPython только для ASCII была удалена, поэтому поддержка Unicode всегда доступна.
Классик против Феникса :
Начиная с wxPython 3.0.0 существовала выпущенная «Классическая» сборка wxPython и Phoenix , в настоящее время невыпущенная сборка . Классическая сборка имеет тенденцию отставать от сборок wxWidgets с такими же номерами, а пакет документации — это C ++ — он доступен для загрузки для различных платформ (см. Установка классической версии), в случае Windows в качестве исполняемого установщика. Привязки Phoenix, которые в основном создаются автоматически, должны более точно соответствовать сборкам wxWidgets, а также включать документацию, специфичную для wxPython — она может быть создана из исходных кодов или ночных сборок , поскольку колеса могут быть получены с помощью pip (см. Установка Феникс).
В wxPython, но не в wxWidgets
wxPython расширяет библиотеку wxWidgets рядом функций, это лишь некоторые из них, недоступны в wxWidgets:
Демо Скриншоты
на Win10
Демо wxPython со всеми закрытыми ветками:
Одно из недавних дополнений:
Один из AGW (расширенные общие виджеты):
Привет, мир
Простой способ создать программу Hello World :
импорт wx
приложение = wx.Приложение (перенаправление = False)
frame = wx.Frame (parent = None, id = wx.ID_ANY, title = 'Hello World')
frame.Show ()
app.MainLoop ()
Выход:
Более типичным примером может быть подкласс wx.Frame :
импорт wx
класс MyFrame (wx.Frame):
def __init __ (сам):
wx.Frame .__ init __ (self, None, title = 'Hello World')
self.Show ()
если __name__ == '__main__':
приложение = wx.Приложение (перенаправление = False)
frame = MyFrame ()
app.MainLoop ()
Это также можно переписать для использования Python super :
импорт wx
класс MyFrame (wx.Frame):
def __init __ (self, * args, ** kwargs):
"""Конструктор"""
super (MyFrame, self) .__ init __ (* args, ** kwargs)
self.Show ()
если __name__ == '__main__':
app = wx.App (Ложь)
frame = MyFrame (Нет, title = 'Hello World')
приложение.MainLoop ()
Установка wxPython Classic
wxPython Classic — это сборка библиотеки wxPython Python 2 . Создание привязок python требует большого количества ручных вмешательств, а документация — это просто документация wxWidgets, которая содержит некоторые аннотации по механизмам wxPython, поэтому обычно между новым выпуском wxWidgets и соответствующим выпуском wxPython существует задержка от нескольких недель до месяцев. .
Перейдите на страницу загрузки на веб-сайте wxPython, чтобы узнать, существует ли уже версия wxPython, которую вы можете загрузить для своей платформы.
Последняя версия Classic — 3.0.2.0
Окна
На сайте есть установщики Python 2.6 и 2.7 для 32-битных и 64-битных платформ Windows. Просто скачайте один из них и запустите, чтобы установить.
Примечание. Убедитесь, что вы загрузили установщик wxPython для правильного установленного Python.Например, если у вас 32-разрядная версия Python 2.7, вам нужен 32-разрядный установщик wxPython
Mac
Если у вас OSX 10.5 или более поздняя версия , вам нужно будет загрузить и установить версию wxPython Cocoa . Версия Какао также поддерживает 64-битный Mac.
Если у вас Mac с версией OSX ниже 10,5 , то вам понадобится сборка Carbon .
Linux
Первое, что нужно проверить, если менеджер пакетов вашей платформы Linux (т.е.е. yum, apt-get и т. д.), чтобы узнать, есть ли у него версия wxPython, которую вы можете установить. К сожалению, многие пакеты Linux для wxPython предназначены для версии 2.8.12.1 вместо 3.0.2.0. Если в вашем диспетчере пакетов нет последней версии, вам, вероятно, придется собрать его самостоятельно.
Инструкции по сборке 3.0.2.0-Classic здесь
Установка wxPython Phoenix
wxPython Phoenix — это последняя версия wxPython (в настоящее время сентября 2016 г. без официального выпуска).Он поддерживает как Python 2, так и Python 3. Вы можете скачать сборку моментального снимка (т. Е. Колесо Python) для своей платформы и версию Python здесь.
wxPython Phoenix использует в значительной степени автоматизированный механизм для создания как привязок python для библиотеки wxWidgets, так и документации. Документация Phoenix wxPython создается специально для него с помощью Sphinx. Это увеличивает ясность по сравнению с документацией C ++ классической сборки, которая включает множество перегрузок, недоступных в wxPython.
Python и pip должны быть установлены перед установкой wxPython Phoenix.
Вы можете использовать pip для установки версии wxPython для Phoenix. Вот рекомендуемый в настоящее время метод:
python -m pip install --no-index --find-links = http: //wxpython.org/Phoenix/snapshot-builds/ --trusted-host wxpython.org wxPython_Phoenix
Когда вы используете эту команду, pip также установит wxWidgets . Эта сложная команда pip, вероятно, станет pip install wxpython после официального выпуска Phoenix.
Примечание. WxPython Phoenix в настоящее время находится на стадии бета-тестирования и не имеет всех виджетов, которые есть в классической версии.
Что такое серия выпусков wxPython?
Проект wxWidgets принял модель выпуска, используемую проектом ядра Linux, где есть чередующиеся наборы выпусков, где один набор считается «стабильным», а следующий набор считается «разрабатываемым». Для wxWidgets «стабильный» и «разработка» относятся не к ошибкам, а к стабильности API и обратной совместимости.
Стабильный : На протяжении всего цикла существующие API-интерфейсы не изменяются, хотя могут быть добавлены новые методы невиртуального класса. Двоичная совместимость библиотек C ++ поддерживается за счет запрета каких-либо изменений, которые изменяют размер в памяти или макет классов и структур. Это может и часто накладывает ограничения на то, какие виды улучшений или исправлений ошибок могут быть выполнены в стабильной серии выпусков, однако на самом деле это влияет только на уровень C ++, потому что в Python обратная совместимость имеет несколько иное значение.
Разработка : Основной целью серии выпусков для разработки является добавление новых функций или исправление проблем, которые не могли быть исправлены в стабильной серии из-за проблем двоичной совместимости, и все это в попытке создать следующую стабильную серию. Таким образом, в течение всего цикла разработки API-интерфейсы могут быть изменены или удалены по мере необходимости, хотя большую часть времени совместимость на уровне исходного кода C ++ поддерживается с помощью устаревших перегруженных функций или макросов и т. Д.Для wxPython это часто означает несовместимость на уровне исходного кода из-за отсутствия перегрузки или макросов, а для поддержки новой версии API иногда необходимо удалить старую версию.
Из-за проблем с двоичной совместимостью последняя разрабатываемая версия wxWidgets / wxPython часто может содержать меньше ошибок, чем последняя версия последней серии стабильных выпусков. Однако существует компромисс, заключающийся в том, что API-интерфейсы могут изменяться или развиваться между версиями в серии разработки.
Как работают номера версий?
Для выпусков wxPython использует номер версии из 4 компонентов. Хотя это очень похоже на то, как номера версий используются в других проектах с открытым исходным кодом, есть несколько тонких отличий. Итак, для некоторого выпуска A.B.C.D вы можете вывести следующее:
- Серия выпуска : Первые два компонента номера версии ( AB ) представляют серию выпуска, и если компонент B является четным числом, это стабильная серия, если это нечетное число, то это серия выпусков для разработки.Например, версии 2.4, 2.6 и 2.8 являются стабильными, а API более или менее заморожен в каждой серии, а версии 2.3, 2.5 и 2.7 находятся в стадии разработки, а API и функциональные возможности могут изменяться или развиваться по мере необходимости.
Из-за этого между одной стабильной серией могут быть довольно большие изменения (скажем, от 2,4 до 2,6), и это часто сбивает людей с толку, потому что в других проектах изменения такого масштаба привели бы к изменению первого компонента номера версии. . Вместо этого вам следует подумать о комбинации A.