gpt4 book ai didi

python - PyQt自定义对话框——如何获取返回值?

转载 作者:行者123 更新时间:2023-11-30 23:10:00 24 4
gpt4 key购买 nike

使用 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)

问题是,这没有捕获任何值(value)。

谢谢!

最佳答案

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.done(int),而不是使用QDialog.close(),整数是QDialogCode。这样您就可以保留 if 语句。

关于python - PyQt自定义对话框——如何获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com