Простой графический интерфейс Windows Drag & Drop
Я хотел бы сделать простой графический интерфейс, который предлагает кнопки, которые я могу перетащить в другие приложения Windows, чтобы другие приложения получали определенную строку в зависимости от выбранной кнопки.
Какая была бы самая простая инфраструктура графического интерфейса для Python, которая позволяет это перетаскивание?
- python: urllib2 с использованием другого сетевого интерфейса
- есть ли инструмент для автоматического создания интерфейса с помощью swig?
- Отзывчивая запись PyAudio
- Взаимодействие с кривой на графике Matplotlib
- Рекурсивные определения классов в Python
Любой из библиотек пользовательского интерфейса, вероятно, будет поддерживать это в некотором роде. В wxPython мы позволяем перемещать элементы списка между различными списками. Все может выглядеть так:
class JobList(VirtualList): def __init__(self, parent, colref = 'job_columns'): VirtualList.__init__(self, parent, colref) def _bind(self): VirtualList._bind(self) self.Bind(wx.EVT_LIST_BEGIN_DRAG, self._startDrag) def _startDrag(self, evt): # Create a data object to pass around. data = wx.CustomDataObject('JobIdList') data.SetData(str([self.data[idx]['Id'] for idx in self.selected])) # Create the dropSource and begin the drag-and-drop. dropSource = wx.DropSource(self) dropSource.SetData(data) dropSource.DoDragDrop(flags = wx.Drag_DefaultMove)
Затем есть класс ListDrop, который облегчает удаление вещей в списки:
class ListDrop(wx.PyDropTarget): """ Utility class - Required to support List Drag & Drop. Using example code from http://wiki.wxpython.org/ListControls. """ def __init__(self, setFn, dataType, acceptFiles = False): wx.PyDropTarget.__init__(self) self.setFn = setFn # Data type to accept. self.data = wx.CustomDataObject(dataType) self.comp = wx.DataObjectComposite() self.comp.Add(self.data) if acceptFiles: self.data2 = wx.FileDataObject() self.comp.Add(self.data2) self.SetDataObject(self.comp) def OnData(self, x, y, d): if self.GetData(): if self.comp.GetReceivedFormat().GetType() == wx.DF_FILENAME: self.setFn(x, y, self.data2.GetFilenames()) else: self.setFn(x, y, self.data.GetData()) return d
И, наконец, список, в котором можно отбросить вещи:
class QueueList(VirtualList): def __init__(self, parent, colref = 'queue_columns'): VirtualList.__init__(self, parent, colref) self.SetDropTarget(ListDrop(self.onJobDrop, 'JobIdList', True)) def onJobDrop(self, x, y, data): idx, flags = self.HitTest((x, y)) #@UnusedVariable if idx == -1: # Not dropped on a list item in the target list. return # Code here to handle incoming data.
PyQt на помощь.
Теоретически вы можете использовать любую библиотеку, для которой существует графический конструктор drag-and-drop. Такие инструменты часто создают язык разметки, который анализирует библиотека, а иногда они генерируют код напрямую. Последнее зависит от языка, в то время как первое не должно быть. В любом случае, вы найдете способ сделать это с Python.
Практически, некоторые библиотеки имеют лучшие инструменты визуального проектирования, которые другие. Дизайнер WinForms был действительно изящным и бесшовным, когда я его использовал, возможно, IronPython? Как насчет PyGTK, с Glade или вышеупомянутым PyQt? Может быть, Jython использует Swing, разработанный в NetBeans?
EDIT: Упс, я не правильно прочитал вопрос. То, что вы ищете, – это инфраструктура с возможностями перетаскивания, то есть большинство из них. Есть много вещей, которые следует учитывать, например, как это происходит из того же процесса, что и конечные и исходные окна? Будут ли они написаны с той же структурой? Эти вещи могут быть релевантными или нет, в зависимости от того, как все написано.
- Что такое прямой подход к сопоставлению и перечислению результатов викторины с использованием Python
- Запуск сценария python в фоновом режиме с nohup и выбор времени
- Как избежать замораживания GUI при связывании скрипта muliprocessing python, связанного с gui (скрипт python должен работать в фоновом режиме)
- Проблемы с просмотром PDF-файлов
- «Иногда», получая InterfaceError на PostgreSQL с Peewee ORM
- Как проверить статус или убить внешний процесс с помощью python
- Почему pylint продолжает говорить, что мой класс R0923 – «интерфейс не реализован»
- В компиляции SWIG: В заголовочном файле в интерфейсе не удается разрешить другие файлы заголовков.
- Ошибка импорта графики Python
- Свойства интерфейса DBus
- Оберните несколько C-источников (файлы .c), чтобы использовать их функции в Python, используя SWIG