В моем основном Faction Widget У меня есть список, содержащий Faction Objects. Каждая фракция имеет имена и имена членов команды. Я не уверен, что привязка будет идеальным решением для этого. Если это так, я не уверен, как сделать привязку?отображение списков объектов в pyside QListWidgets с использованием python, привязка?
Как я могу сделать следующее. 1. Отобразить имена фракций/команд в списке слева? 2. При создании нового имени команды с помощью editext оно обновляет список слева. 3. Когда команда выбрана, она заполняет список справа, отображая имена членов команды. 4. Когда пользователь вводит новое имя участника, он добавляется в выбранную команду слева.
тока UI
цель UI
код ...
#!/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_())
это не представляется обвязку, хотя. что я и надеялся сделать. потому что в конце дня я хочу иметь возможность создавать новые команды, и когда команда будет выбрана, сможете добавлять членов в выбранную команду. – JokerMartini
я обновил вышеприведенную запись, чтобы содержать мой класс для команд. – JokerMartini