gpt4 book ai didi

python - PyQt5 QListWidget 带有复选框和拖放

转载 作者:行者123 更新时间:2023-12-01 08:12:37 30 4
gpt4 key购买 nike

我正在尝试构建一个 PyQt5 应用程序,我想创建一个列表小部件,其元素可拖放,但每个小部件还与一个复选框关联。

我可以像这样创建一个可拖放的QListWidget:

import sys

from PyQt5.QtWidgets import QApplication, QListWidget


if __name__ == '__main__':
app = QApplication(sys.argv)

lw = QListWidget()
for i in range(5):
text = f'Item {i}'
lw.addItem(text)

lw.setDragDropMode(lw.InternalMove)
lw.show()

sys.exit(app.exec_())

但是,当我尝试向每个项目添加复选框时,拖放功能似乎中断了。使用以下代码进行拖放操作不起作用:

import sys

from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem
from PyQt5.QtCore import Qt


if __name__ == '__main__':
app = QApplication(sys.argv)

lw = QListWidget()
for i in range(5):
text = f'Item {i}'
item = QListWidgetItem(text)
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
lw.addItem(item)

lw.setDragDropMode(lw.InternalMove) # Drag and drop doesn't work...
lw.show()

sys.exit(app.exec_())

有没有办法获得可拖放的元素,每个元素都包含一个复选框?

提前致谢

最佳答案

默认情况下,QListWidgetItem 激活以下标志:

Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled

但是您通过删除 ItemIsDragEnabled 标志来覆盖它,从而防止项目被拖动。

因此解决方案是使用 | 运算符激活该标志:

item.setFlags(item.flags() | Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)

尽管您会发现这是不必要的,因为这些标志是默认激活的,但最简单的事情是激活初始状态:

import sys

from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem
from PyQt5.QtCore import Qt

if __name__ == '__main__':
app = QApplication(sys.argv)

lw = QListWidget()
for i in range(5):
text = f'Item {i}'
item = QListWidgetItem(text)
item.setCheckState(Qt.Unchecked)
lw.addItem(item)
lw.setDragDropMode(lw.InternalMove)
lw.show()
sys.exit(app.exec_())

关于python - PyQt5 QListWidget 带有复选框和拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55145390/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com