Рубрики
Без рубрики

wxpython: введение в перетаскивание

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Большинство компьютеров этого дня и возраста используют сопротивление (DND) инстинктивно. Вы, вероятно, использовали его для передачи некоторых файлов из одной папки в другую на этой неделе! Toolkit WXPYPHON GUI Toolkit предоставляет функциональность перетаскивания и запеченной в этом руководстве. В этом уроке мы посмотрим, насколько легко реализовать!

Начиная

WXPYPHON обеспечивает несколько различных видов перетаскивания. Вы можете иметь один из следующих типов:

  • wx.filedroptarget
  • wx.textdroptarget
  • WX.PYDROPTARGET

Первые два довольно явно объясняют. Последний, WX.PYDROPTARGET, это просто свободная обертка вокруг самого WX.DROPTARGET. Он добавляет пару дополнительных удобных методов, которые не имеют простых wx.droptarget. Начнем с примера WX.FileDropTarget.

Создание FileDropTarget

Drag-N-Droping файлы

Инструментарий WXPYPHON делает создание цели падения довольно простую. Вам нужно переопределить метод, чтобы он работал правильно, но кроме этого, это довольно быстро. Давайте найдя момент, чтобы посмотреть на этот пример код, а затем мы потратим некоторое время, объясняя его.

Это было не так уж плохо, это было? Первое, что нужно сделать, это подкласс wx.filedroptarget , что мы делаем с нашей MyFileDropTarget класс. Внутри того, что у нас есть один переопределенный метод, OnDroopFiles Отказ Он принимает положение K/Y мыши и путей файлов, которые выпадают, то он записывает те текстовые элементы управления. Чтобы подключить цель для управления текстом, вы захотите посмотреть в ДНДПАНЕЛЬ класс, где мы называем текстовый элемент управления SetDropTarget Способ и установите его в экземпляр нашего класса Chapt Target. У нас есть еще два метода в нашем классе панели, которые вызовы класса The Crop Class для обновления текстового управления: SETINSINTIONPOFTEND и UPTATETTEXT. Обратите внимание, что поскольку мы передаем объект панели в качестве цели падения, мы можем позвонить этим методам, что мы хотим. Если TextCtrl был целевой падения, нам придется сделать это по-разному, что мы увидим в нашем следующем примере!

Создание TextDropTarget

Перетащите текст

WX.TextDropTarget используется, когда вы хотите иметь возможность перетаскивать и отбросить выбранный выбранный текст в текстовый элемент управления. Вероятно, один из наиболее распространенных примеров перетаскивает URL на веб-страницу до адресной строки или в окне поиска в поле «Поиск» в Firefox. Давайте потратим некоторое время, узнав, как создать один из таких типов целей падения в Wxpython!

Еще раз мы должны подкласс нашего целевого класса. В этом случае мы называем это MyTextDropTarget Отказ В этом классе мы должны переопределить OnDropText и Ondragover Отказ Я не смог найти удовлетворительную документацию на последнем, но я предполагаю, что он просто возвращает копию данных. Метод OndropText записывает текст в управление текстом. Обратите внимание, что, поскольку мы связали цель падения непосредственно к элементу управления текстом (см. Класс панели), мы должны использовать метод с именем WriteText обновить текстовый элемент управления. Если вы измените его, вы получите сообщение об ошибке.

Пользовательский DND с PydropTarget

Перетащите URL-адреса с PydropTarget

Если вы еще не догадались, эти примеры были слегка модифицированными версиями DND-демонстрационных демонстраций от официального WXPYPHON DEMO. Мы будем использовать какой-код, основанный на их демонстрационной демонстрации Urldraganddrop, чтобы объяснить PydropTarget. Забавный бит об этой демонстрации заключается в том, что вы не только можете создать виджет, который может принять перетаскиваемый текст, но вы также можете перетащить текст из другого виджета обратно в ваш браузер! Давайте посмотрим:

Первый класс – наш класс Target. Здесь мы создаем wx.urldataObject который хранит нашу информацию URL. Тогда в Ондата Метод мы извлекаем URL-адрес и добавляем его к связанным текстовым элементе управления. В нашем классе панели мы подключаемся к тому, что мы сделали в двух других примерах, поэтому мы пропустим это и продолжаем новую вещь. Второй текстовый контроль – там, где нам нужно обратить внимание. Здесь мы находим его к движению мыши через evt_motion. В обработчике события движения мыши (OnStardDrag) мы проверяем, чтобы убедиться, что пользователь перетаскивает. Если это так, то мы снимаем значение из текстового поля и добавьте его в вновь созданный URLDataObject. Далее мы создаем экземпляр A Dropsource И пропустите его второй текстовый контроль, так как это источник. Мы устанавливаем данные источника в UrldataObject. Наконец мы называем Додрагроп на нашем источнике капля (текстовое управление), которое будет реагировать, перемещая, копирование, отмену или неспособность. Если вы перетащили URL на адресную панель вашего браузера, он будет скопировать. В противном случае это, вероятно, не будет работать. Теперь давайте возьмем то, что мы узнали и создали что-то оригинальное!

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

Перетащите с помощью ObjectListView

Я думал, что было бы забавно взять Demo Chare Target Carm и сделать его во что-то с помощью виджета ObjectListView (Wrapper ListCtrl), который может сообщить нам некоторую информацию о файлах, которые мы бросаем в него. Мы покажем следующую информацию: имя файла, дата создания, модифицированная дата и размер файла. Вот код:

Большинство этого материала вы видели раньше. У нас есть наш Filedroptarget Подкласс, мы подключаем панель к ней, а затем виджет ObjectListView к экземпляру Crop Target. У нас также есть универсальный класс для проведения наших данных, связанных с файлами. Если вы запустите эту программу и отправляете в него папки, вы не получите корре