간단히 말해서 내가 한 일은 textEdit 필드를 포함하는 사용자 정의 위젯을 만드는 것입니다. 사용자 정의 위젯을 FormWidget이라고합니다.
이 사용자 정의 (FormWidget)는 다른 위젯 내에서 여러 번 사용됩니다. 텍스트 필드의 값을 '가져 와서'특정 변수에 추가하는 방법이 궁금합니다.
이 위젯을 여러 번 인스턴스화 할 계획이고 각 텍스트 필드가 다른 변수에 해당하기 때문에 FormWidget 위젯 자체에서 변수를 직접 추가하고 싶지 않습니다.
#!/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_())
FormWidget의 값 목록을 유지하고 returnPressed에 저장하십시오. 그런 다음 FormWidget에 getValue () 메서드를 추가하여 값 목록을 반환합니다. 또한 값을 초기화하고 지우는 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_())
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다