pythonpyqt如何从自定义对话框类获取函数值

2024-09-30 01:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是pyqt的新手,我正在尝试创建一个选择器listwidgets,它可以被其他函数调用,传入条目供用户选择,并从用户从函数中选择的值中获取值。在

这就是我要做的:

class SelectorDialog(QtGui.QWidget):
    def __init__(self, parent=None):
        super(SelectorDialog, self).__init__(parent)

        QtGui.QWidget.__init__(self)
        self.setWindowFlags(QtCore.Qt.Dialog)
        self.setupUi(self)

        someItems = ['itemA', 'itemB', 'itemSomething']
        for item in someItems:
            list = QtGui.QListWidgetItem(item)
            self.listWidget.addItem(list)    
        #self.show()

    def setupUi(self, Form):
        Form.setWindowTitle('To which item?')
        self.verticalLayoutWidget = QtGui.QWidget(Form)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 500, 150))
        self.verticalLayout = QtGui.QVBoxLayout(self.verticalLayoutWidget)
        self.listWidget = QtGui.QListWidget(self.verticalLayoutWidget)
        self.verticalLayout.addWidget(self.listWidget)

        self.okButton = QtGui.QPushButton("OK")
        self.cancelButton = QtGui.QPushButton("Cancel")

        self.hbox = QtGui.QHBoxLayout(self.verticalLayoutWidget)
        self.hbox.addStretch(1)
        self.hbox.addWidget(self.okButton)
        self.hbox.addWidget(self.cancelButton)

        self.verticalLayout.addLayout(self.hbox)
        QtCore.QMetaObject.connectSlotsByName(Form)

        self.cancelButton.clicked.connect(lambda: self.close())
        self.okButton.clicked.connect(lambda: self.pick(self))  

    def pick(self, Form):
        for item in self.listWidget.selectedItems():
            picked = str(item.text())
        print picked



def whichItem():
    selector = SelectorDialog(parent)

    #find out picked item by SelecteorDialog, how ?

Tags: selfforminitdefitemparentqtguiqwidget
1条回答
网友
1楼 · 发布于 2024-09-30 01:29:43

首先,如果您的对象是一个对话框,那么最好从QDialog子类化,而不是{}。这允许使用QDialog的accept()和{}方法。在

注意,我目前无法测试以下内容,但它基于我编写的代码。

因此,在setupUi中,我将进行以下更改:

self.cancelButton.clicked.connect(self.reject) # Clicked cancel
self.okButton.clicked.connect(self.accept)  #Clicked accept

然后,当您调用对话框时,您可以检查用户是否真的“接受”了对话框还是取消了它:

^{pr2}$

然后在类定义中进行以下更改:

Class SelectorDialog(QtGui.QDialog):
    ...
    def getPicks(self):
        picked = []
        for item in self.listWidget.selectedItems():
            picked.append(str(item.text()))
        return picked

相关问题 更多 >

    热门问题