我正在學習PyQt4(我正在使用4.4.4版本),我對Python(Python 2.5)很新。我有一個QListWidget和一個QPushButton的GUI。我希望用戶能夠單擊以在列表中選擇一個條目,然後單擊QPushButton並讓選定條目消失(從QList中刪除)。我在這個問題上一直在抨擊我的頭一個多星期,我會深表感謝。PyQt4:使用QPushButton小部件從QList小部件中刪除項目
目前,我的GUI出現了,我可以選擇不同的列表項(一次只有一個),但是當我點擊QPushButton時,沒有任何反應。選擇顏色從藍色變爲灰色,但不刪除條目。命令提示符(Windows 7)中不顯示錯誤。
我已經定義了一個函數remove(),我用它作爲QPushButton的插槽。我相信QPushButton.connect爲Qt Signal to Python Slot提供了正確的定義,基於我見過的類似問題的答案,但是這些項目並未被刪除。但是,remove函數甚至沒有被觸發。我在函數中有一個print語句,但是當我單擊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())
...
我試圖發佈圖片,但我沒有足夠的聲望。如果您認爲圖片有用,請告訴我,我可以將其發送給您。
PyQt 4.4.4真的很舊。有沒有任何理由使用這樣一個古老的版本? – Avaris
首先:我爲防務承包商工作。我們的IT部門。保持嚴格控制的「批准」軟件列表,這些軟件始終是許多版本。我仍在使用Python 2.5。是的,這是愚蠢的。其次:我也不是我自己的電腦上的管理員,所以我不能只下載這個開源軟件並使用它們來繞過IT。第三,也是最重要的一點:這是一個項目的一部分,用於更新一箇舊的內部軟件程序,Py2.5和PyQt4.4.4,這是1000行的線和不斷使用。把它離線重寫Py3.0和PyQt5中的所有東西不是一種選擇。 – SatelliteEyes
我明白了。版本與您的問題無關。它只是讓我覺得「奇怪」。但是,如果它與一些遺留代碼相關聯,這是有道理的。 – Avaris