Python / PyQt4:如何使 QComboBox 项可拖动
Posted
技术标签:
【中文标题】Python / PyQt4:如何使 QComboBox 项可拖动【英文标题】:Python / PyQt4: How to make a QComboBox Item draggable 【发布时间】:2014-01-17 20:10:11 【问题描述】:我只是为了好玩而修补 PyQt...
到目前为止,我有以下代码,它接受从文本字段中删除来填充 QComboBox:
class ComboBox(QtGui.QComboBox):
def __init__(self, parent):
super(ComboBox, self).__init__(parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
def dropEvent(self, e):
self.addItem(QtCore.QString(e.mimeData().text()))
我现在想让 QComboBox 中的项目可拖动(就像您可以使用以下方法使用 QLineEdit 一样:
.setDragEnabled(True)
有人知道我该怎么做吗?
非常感谢
P
【问题讨论】:
【参考方案1】:您可以使用combobox.view().setDragDropMode(Qt.QAbstractItemView.DragOnly)
启用拖动。以下工作示例说明了如何实现将项目从一个组合框拖动到另一个组合框:
combobox = Qt.QComboBox()
combobox.addItems(["test1", "test2", "test3"])
combobox.show()
combobox.view().setDragDropMode(Qt.QAbstractItemView.DragOnly)
model_mime_type = 'application/x-qabstractitemmodeldatalist'
class ComboBox(Qt.QComboBox):
def __init__(self):
super(ComboBox, self).__init__()
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat(model_mime_type) or \
e.mimeData().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
def dropEvent(self, e):
if e.mimeData().hasFormat(model_mime_type):
encoded = e.mimeData().data(model_mime_type)
stream = Qt.QDataStream(encoded, Qt.QIODevice.ReadOnly)
while not stream.atEnd():
row = stream.readInt()
column = stream.readInt()
map = stream.readQVariantMap()
if len(map.values()) == 1:
self.addItem(map.values()[0].toString())
combobox.hidePopup()
else:
self.addItem(Qt.QString(e.mimeData().text()))
c2 = ComboBox()
c2.show()
【讨论】:
谢谢,太好了!如果我有足够的积分,我会投票!以上是关于Python / PyQt4:如何使 QComboBox 项可拖动的主要内容,如果未能解决你的问题,请参考以下文章
PyQt4:如何使图标大于 QPushButton? (像素图按钮)
如何在 PyQt4 中使用 QtGui 来收集 Python 程序的输入变量?
使用 Anaconda Python 的 PyQt Windows 安装程序 - 未找到 PyQt4;如何进行故障排除?