1
使用PyQt5,我試圖得到一個自定義對話框(包含一個簡單的QListWidget)來返回一個值。 我知道以前有類似的問題,但不知何故,我似乎沒有得到工作的答案。PyQt自定義對話框 - 如何獲取返回值?
自定義對話框是在這個類:
class ListSelection(QDialog):
def __init__(self, item_ls, parent=None):
super(ListSelection, self).__init__(parent)
self.result = ""
#=================================================
# listbox
#=================================================
self.listWidget = QListWidget()
for item in item_ls:
w_item = QListWidgetItem(item)
self.listWidget.addItem(w_item)
self.listWidget.itemClicked.connect(self.OnSingleC lick)
self.listWidget.itemActivated.connect(self.OnDoubl eClick)
layout = QGridLayout()
row=0
layout.addWidget(self.listWidget,row,0,1,3) #col span=1, row span=3
#=================================================
# OK, Cancel
#=================================================
row +=1
self.but_ok = QPushButton("OK")
layout.addWidget(self.but_ok ,row,1)
self.but_ok.clicked.connect(self.OnOk)
self.but_cancel = QPushButton("Cancel")
layout.addWidget(self.but_cancel ,row,2)
self.but_cancel.clicked.connect(self.OnCancel)
#=================================================
#
#=================================================
self.setLayout(layout)
self.setGeometry(300, 200, 460, 350)
def OnSingleClick(self, item):
self.result = item.text()
def OnDoubleClick(self, item):
self.result = item.text()
self.close()
return self.result
def OnOk(self):
if self.result == "":
QMessageBox.information(self, "Error",
"One item must be selected")
return
self.close()
return self.result
def OnCancel(self):
self.close()
def GetValue(self):
return self.result
這是調用函數做什麼:
def SomeFunction()
ls = ['apples','bananas','melons']
lb = ListSelection(ls)
if lb.exec_():
value = lb.GetValue()
print(value)
的問題是,這並沒有捕獲任何價值。
謝謝!
OP要忽略用戶取消的情況。所以正確的測試方法是:'if lb.exec_()== QDialog.Accepted'。 – ekhumoro
問題解決!另外,使用'QDialog.done(int)'而不是'QDialog.close()'實際上是一個重要的提示。 – Karpov
@Karpov。更好:使用['accept()'](http://doc.qt.io/qt-4.8/qdialog.html#accept)和['reject()'](http://doc.qt.io /qt-4.8/qdialog.html#reject),而不是'close()'。 – ekhumoro