从python中的widget向变量列表追加项

2024-05-29 00:14:03 发布

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

简而言之,我所做的就是创建一个包含textEdit字段的自定义小部件。自定义小部件称为FormWidget。在

然后在另一个小部件内部多次使用这个自定义(FormWidget)。我想知道如何“获取”文本字段的值并附加一个特定的变量。在

我不想直接从FormWidget小部件本身附加变量,因为我计划多次实例化这个小部件,每个文本字段将对应一个不同的变量。在

enter image description here

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
Info goes here...
"""

import sys
from PySide import QtGui, QtCore

# Variables
# ------------------------------------------------------------------------------
namesList = []

# custom name widget
# ------------------------------------------------------------------------------
class FormWidget(QtGui.QWidget):

    def __init__(self, title=None):
        super(FormWidget, self).__init__()

        self.initUI()
        if title!=None:
            self.listLabel.setText(title)

    def initUI(self): 

        # formatting 
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle("Input List")

        # widgets
        self.listLabel = QtGui.QLabel("Label")
        self.nameInput = QtGui.QLineEdit()

        # signals
        self.nameInput.returnPressed.connect(self.pressed_return)

        # layout
        self.mainLayout = QtGui.QVBoxLayout(self)
        self.mainLayout.addWidget(self.listLabel)
        self.mainLayout.addWidget(self.nameInput)
        self.show()

    def pressed_return(self):
        txt = self.nameInput.text()
        txt = txt.strip()
        txt = txt.replace (" ", "_")
        self.nameInput.clear()


# Main widget
# ------------------------------------------------------------------------------
class TeamsWidget(QtGui.QWidget):

    def __init__(self):
        super(TeamsWidget, self).__init__()

        self.initUI()

    def initUI(self): 

        # formatting 
        self.setGeometry(300, 300, 250, 50)
        self.setWindowTitle("Names")

        # widgets
        self.formWidget = FormWidget("Names")
        self.btn = QtGui.QPushButton("Print")

        # signals
        self.btn.clicked.connect(self.printNames)

        # layout
        self.mainLayout = QtGui.QHBoxLayout(self)
        self.mainLayout.addWidget(self.formWidget)
        self.mainLayout.addWidget(self.btn)
        self.show()

    def printNames(self):
        print "Printing Names..."
        for n in namesList:
            print n


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    ex = TeamsWidget()
    sys.exit(app.exec_())

Tags: selftxttitleinit部件defsysformwidget
1条回答
网友
1楼 · 发布于 2024-05-29 00:14:03

只需将值列表保存在FormWidget中,并将其存储在returnPressed上。然后将getValue()方法添加到FormWidget以返回值列表。我还添加了一个clear()方法来初始化和清除这些值,这是在FormWidget中对init调用的。在

完成以下代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
Info goes here...
'''

import sys
from PySide import QtGui, QtCore

# Variables
#                                        
namesList = []

# custom name widget
#                                        
class FormWidget(QtGui.QWidget):

    def __init__(self, title=None):
        super(FormWidget, self).__init__()

        self.clear()

        self.initUI()
        if title!=None:
            self.listLabel.setText(title)

    def initUI(self):

        # formatting
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Input List')

        # widgets
        self.listLabel = QtGui.QLabel('Label')
        self.nameInput = QtGui.QLineEdit()

        # signals
        self.nameInput.returnPressed.connect(self.returnPressed)

        # layout
        self.mainLayout = QtGui.QVBoxLayout(self)
        self.mainLayout.addWidget(self.listLabel)
        self.mainLayout.addWidget(self.nameInput)
        self.show()

    def returnPressed(self):
        text = self.nameInput.text()
        text = text.strip()
        text = text.replace (' ', '_')
        self.value.append(text)
        self.nameInput.clear()

    def getValue(self):
        return self.value

    def clear(self):
        self.value = []


# Main widget
#                                        
class TeamsWidget(QtGui.QWidget):

    def __init__(self):
        super(TeamsWidget, self).__init__()

        self.initUI()

    def initUI(self):

        # formatting
        self.setGeometry(300, 300, 250, 50)
        self.setWindowTitle('Names')

        # widgets
        self.formWidget = FormWidget('Names')
        self.btn = QtGui.QPushButton('Print')

        # signals
        self.btn.clicked.connect(self.printNames)

        # layout
        self.mainLayout = QtGui.QHBoxLayout(self)
        self.mainLayout.addWidget(self.formWidget)
        self.mainLayout.addWidget(self.btn)
        self.show()

    def printNames(self):
        print 'Printing Names...'
        for name in self.formWidget.getValue():
            print name


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = TeamsWidget()
    sys.exit(app.exec_())

相关问题 更多 >

    热门问题