在我的主要Faction Widget中,我有一个包含Faction Objects的列表。每个派系都有一个名称和团队成员名称。我不确定绑定是否是理想的解决方案。如果是这样我不知道怎么做绑定?
我该怎么做? 1.在左侧列表视图中显示派系/团队名称? 2.使用editext创建新的团队名称时,它会更新左侧的列表视图。 3.选择一个团队后,它会填充显示团队成员名称的右侧列表。 4.当用户输入新的成员名称时,它会被添加到左侧的选定团队中。
当前用户界面
目标用户界面
代码......
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Info goes here...
"""
import sys
import core_models as models
from PySide import QtGui, QtCore
"""
Base class of team which contains 2 properties
name - name of team
members - list of team member names
"""
################################################################################
class Team:
"""
One line description...
other info....
"""
def __init__(self, name, members=None):
self._name = name
if members==None:
self._members = []
@property
def name(self, value):
# add type validation lines here
self._name = value
@property
def members(self, value):
# add type validation lines here
self._members = value
"""
Base widget which contains
label - describes widget
textedit - input field for appending items to list
listview - displays the list of items teams or members
"""
################################################################################
class NameListWidget(QtGui.QWidget):
def __init__(self, title=None):
super(NameListWidget, 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()
self.nameList = QtGui.QListWidget()
# signals
self.nameInput.returnPressed.connect(self.pressed_return)
# layout
self.mainLayout = QtGui.QVBoxLayout(self)
self.mainLayout.setContentsMargins(0,0,0,0)
self.mainLayout.addWidget(self.listLabel)
self.mainLayout.addWidget(self.nameInput)
self.mainLayout.addWidget(self.nameList)
self.show()
def pressed_return(self):
txt = self.nameInput.text()
# remove leading and trailing whitespaces
txt = txt.strip()
# replace all remaining spaces with underscores
txt = txt.replace (" ", "_")
if (len(txt) >= 1):
self.nameList.addItem(txt)
self.nameInput.clear()
"""
Main team widget contains two instances of the nameList widget
left widget - contains a list of the team names
right widget - contains list of members names for the selected team
"""
################################################################################
class TeamsWidget(QtGui.QWidget):
def __init__(self):
super(TeamsWidget, self).__init__()
self.initUI()
def initUI(self):
# formatting
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle("Teams")
# widgets
self.sportsListWidget = NameListWidget("Teams")
self.memebersListWidget = NameListWidget("Members")
# layout
self.mainLayout = QtGui.QHBoxLayout(self)
self.mainLayout.setSpacing(10)
self.mainLayout.setContentsMargins(10,10,10,10)
self.mainLayout.addWidget(self.sportsListWidget)
self.mainLayout.addWidget(self.memebersListWidget)
self.show()
self.populateUI()
def populateUI(self):
teamsList = ['packers', 'broncos', 'cowboys', 'steelers'];
self.sportsListWidget.nameList.clear()
for i in teamsList:
self.sportsListWidget.nameList.addItem(i)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
ex = TeamsWidget()
sys.exit(app.exec_())
答案 0 :(得分:1)
您可以使用NameListWidget
小部件中的returnPressed()
信号执行此操作:
在initUI
:
self.nameInput.returnPressed.connect(self.pressed_return)
然后创建pressed_return
方法,仍然在NameListWidget
。
def pressed_return(self):
self.nameList.addItem(self.nameInput.text())
self.nameInput.clear()
这会将当前值添加到列表中,然后清除QLineEdit
。