【问题标题】:Python: how to input object properties and build and save object with PyQt widget?Python:如何使用 PyQt 小部件输入对象属性并构建和保存对象?
【发布时间】:2015-07-26 00:09:12
【问题描述】:

我不知道如何输入对象属性并构建/保存对象。我有一个对象:

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 创建的 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)

我想知道如何使用这些类,当输入并单击保存时,对象Vehicle 会使用输入的值创建,如果单击取消按钮,则丢弃输入?

【问题讨论】:

    标签: python pyqt pyqt4


    【解决方案1】:

    你需要用一些信号来连接按钮(在这种情况下是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
    

    希望对你有帮助。

    【讨论】:

    • 我对信号和插槽很熟悉。我只是不清楚哪个班级使用哪个班级。正如你所建议的,我将在InputWIdget 中使用Vehicle 类。我希望这种方式是常用的...
    • @avstenit 是的,至少对于中小型项目是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多