使用PyQt5,我试图获得一个自定义对话框(包含一个简单的QListWidget)来返回一个值。 我知道以前曾经问过类似的问题,但不知怎的,我似乎没有得到解决方案。
自定义对话框在此类中:
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)
问题是,这不会捕获任何值。
谢谢!
答案 0 :(得分:2)
exec_
函数不会返回True
,因此您永远不会打印该值。
根据文档,它返回QDialogCode
,一个int。我测试了下面的代码,它返回0(评估为False
)
def SomeFunction():
ls = ['apples','bananas','melons']
lb = ListSelection(ls)
returnCode=lb.exec_()
print(returnCode)
value = lb.GetValue()
print(value)
所以只是不要放if
,它会打印出值。
修改强>
我想正确的行为是在用户按下确定时打印该值,如果用户按下取消则不打印任何内容。
因此,您可以使用QDialog.close()
而不是QDialog.done(int)
,而QDialogCode
则是if
。这样您就可以保留var now = new Date();
var year = now.getFullYear();
var textbox = document.getElementById('txtbxYear');
textbox.value = year;
声明。