我将contextmenu添加到带有删除和重命名项的listWidget
。对于delete,我使用了RemoveRow
。但是,我无法使用用户输入重命名。如何用允许用户更改名称的操作替换此行item.setText('new_name')
import sys
from PyQt5 import QtCore, QtWidgets
class Dialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super(Dialog, self).__init__()
self.listWidget = QtWidgets.QListWidget()
self.listWidget.addItems('apple orange lemon'.split())
self.listWidget.installEventFilter(self)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.listWidget)
def eventFilter(self, source, event):
if (event.type() == QtCore.QEvent.ContextMenu and
source is self.listWidget):
menu = QtWidgets.QMenu()
Delete = menu.addAction('Delete')
Rename = menu.addAction('Rename')
#action = menu.exec_(event.globalPos())
action = menu.exec_(self.mapToGlobal(event.pos())) #when inside self
if action == Delete:
item = source.itemAt(event.pos())
source.model().removeRow(source.currentRow())
elif action == Rename:
item = source.itemAt(event.pos())
#
item.setText('new')
"How can I rename by user input, not by setText??"
return True
return super(Dialog, self).eventFilter(source, event)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Dialog()
window.setGeometry(600, 100, 300, 200)
window.show()
sys.exit(app.exec_())
您可以使用
QInputDialog.getText()
请求新文本,并将其与setText()
一起使用您甚至可以将文本从列表复制到
QInputDialog
,以便用户可以对其进行编辑完整工作代码
相关问题 更多 >
编程相关推荐