Python: 如何使用PyQt widget 输入对象属性并构建和保存对象?

Python: how to input object properties and build and save object with PyQt widget?

我不知道如何输入对象属性和 build/save 对象。我有一个对象:

class Vehicle(object):
    def __init__(self, brand, model, year):
        self.brand = brand
        self.model = model
        self.year = year

而且我还有一个用于输入的 GUI PyQt 小部件:

class InputWidget(QtGui.QWidget):
    def __init__(self):
        super(InputWidget, self).__init__()
        self.setFixedSize(240, 300)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

以及使用 Qt Designer 创建的 class Ui_Form()

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        self.layoutWidget = QtGui.QWidget(Form)
        self.layoutWidget.setGeometry(QtCore.QRect(0, 20, 193, 103))
        self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
        self.gridLayout = QtGui.QGridLayout(self.layoutWidget)
        self.gridLayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.brand_label = QtGui.QLabel(self.layoutWidget)
        self.brand_label.setObjectName(_fromUtf8("brand_label"))
        self.gridLayout.addWidget(self.brand_label, 0, 0, 1, 1)
        self.model_lineEdit = QtGui.QLineEdit(self.layoutWidget)
        self.model_lineEdit.setObjectName(_fromUtf8("model_lineEdit"))
        self.gridLayout.addWidget(self.model_lineEdit, 1, 3, 1, 1)
        self.brand_lineEdit = QtGui.QLineEdit(self.layoutWidget)
        self.brand_lineEdit.setObjectName(_fromUtf8("brand_lineEdit"))
        self.gridLayout.addWidget(self.brand_lineEdit, 0, 3, 1, 1)
        self.model_label = QtGui.QLabel(self.layoutWidget)
        self.model_label.setObjectName(_fromUtf8("model_label"))
        self.gridLayout.addWidget(self.model_label, 1, 0, 1, 1)
        self.year_label = QtGui.QLabel(self.layoutWidget)
        self.year_label.setObjectName(_fromUtf8("year_label"))
        self.gridLayout.addWidget(self.year_label, 2, 0, 1, 1)
        self.cancel_pushButton = QtGui.QPushButton(self.layoutWidget)
        self.cancel_pushButton.setObjectName(_fromUtf8("cancel_pushButton"))
        self.gridLayout.addWidget(self.cancel_pushButton, 3, 3, 1, 1)
        self.year_lineEdit = QtGui.QLineEdit(self.layoutWidget)
        self.year_lineEdit.setObjectName(_fromUtf8("year_lineEdit"))
        self.gridLayout.addWidget(self.year_lineEdit, 2, 3, 1, 1)
        self.save_pushButton = QtGui.QPushButton(self.layoutWidget)
        self.save_pushButton.setObjectName(_fromUtf8("save_pushButton"))
        self.gridLayout.addWidget(self.save_pushButton, 3, 0, 1, 1)
        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 3, 2, 1, 1)
        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 3, 1, 1, 1)

        QtCore.QMetaObject.connectSlotsByName(Form)

我想知道如何使用这个 classes,当输入并点击保存时,对象 Vehicle 是用输入的值创建的,如果点击取消按钮输入被丢弃?

您需要将按钮与一些信号连接(在本例中为clicked)。

class InputWidget(QtGui.QWidget):
    def __init__(self):
        super(InputWidget, self).__init__()
        self.setFixedSize(240, 300)
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.ui.save_pushButton.clicked.connect(self.save)
        self.ui.cancel_pushButton.clicked.connect(self.cancel)

    def save(self):
        self.vehicle = Vehicle(params)

    def cancel(self):
        self.vehicle = None

希望对您有所帮助。