我正在学习 PyQt4(我使用的是 4.4.4 版),而且我对 Python(Python 2.5)还很陌生。我有一个带有 QListWidget 和 QPushButton 的 GUI。我希望用户能够单击以选择列表中的条目,然后单击 QPushButton 并使所选条目消失(从 QList 中删除)。一个多星期以来,我一直在努力解决这个问题,我将非常感谢一些帮助。
目前,我的 GUI 出现了,我可以选择不同的列表项(现在一次只能选择一个),但是当我单击 QPushButton 时,什么也没有发生。选择颜色从蓝色变为灰色,但不会删除条目。命令提示符 (Windows 7) 中未显示错误。
我已经定义了一个函数 remove(),我将它用作 QPushButton 的插槽。我相信 QPushButton.connect 是为 Qt Signal to Python Slot 正确定义的,基于我所看到的类似问题的答案,但这些项目没有被删除。但是,删除功能甚至没有被触发。我在函数中有一个打印语句,但是当我单击 QPushButton 时它没有被调用,这就是我知道该函数没有被调用的方式。
这是我最近的代码:(我在 meta-SO 上阅读了一篇关于大块代码的非常咆哮的帖子,因此我将其缩减为我认为相关的部分:列表创建、按钮创建和删除功能,我试图将其用作插槽。我在评论中留下了指示其他部分的内容,所以如果您认为我遗漏了一些可以提供帮助的内容,请告诉我,我会添加它回来了)
class questionGUI(QtGui.QWidget):
#This class is the window of the gui.
def __init__(self):
super(questionGUI,self).__init__()
#Layout
grid = QtGui.QGridLayout()
grid.setSpacing(10)
#Labels Needed
...
#Question List
self.qList = QtGui.QListWidget()
#print self.qList
self.qList.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
entries = ['[Pick Image] <Default>','[Slider Question] <Default>', '[Comment Box] <Default>']
for i in entries:
item = QtGui.QListWidgetItem(i)
self.qList.addItem(item)
#Type select
...
#Text insert Needed
...
#Buttons Needed
deleteButton = QtGui.QPushButton('Delete Question')
deleteButton.connect(deleteButton,QtCore.SIGNAL('itemClicked(clicked)'),lambda: self.remove)
addQuestionButton = QtGui.QPushButton('Add Question')
...
doneButton = QtGui.QPushButton('Done')
...
#Parameters Needed
...
#Layout Placement and Window dimensions
...
def addQuestion(self):
...
def remove(self):
print 'remove triggered'
print self.qList.currentItem()
self.qList.removeItemWidget(self.qList.currentItem())
...
我试图发布图片,但我没有足够的声誉。如果您认为图片有用,请告诉我,我可以将其发送给您。