2015-10-29 3 views
2

В моем основном Faction Widget У меня есть список, содержащий Faction Objects. Каждая фракция имеет имена и имена членов команды. Я не уверен, что привязка будет идеальным решением для этого. Если это так, я не уверен, как сделать привязку?отображение списков объектов в pyside QListWidgets с использованием python, привязка?

Как я могу сделать следующее. 1. Отобразить имена фракций/команд в списке слева? 2. При создании нового имени команды с помощью editext оно обновляет список слева. 3. Когда команда выбрана, она заполняет список справа, отображая имена членов команды. 4. Когда пользователь вводит новое имя участника, он добавляется в выбранную команду слева.

тока UI

enter image description here

цель UI

enter image description here

код ...

#!/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_()) 

ответ

1

Вы можете сделать это, используя т он returnPressed() сигнал в вашем NameListWidget виджете:

В 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.


Example

+0

это не представляется обвязку, хотя. что я и надеялся сделать. потому что в конце дня я хочу иметь возможность создавать новые команды, и когда команда будет выбрана, сможете добавлять членов в выбранную команду. – JokerMartini

+0

я обновил вышеприведенную запись, чтобы содержать мой класс для команд. – JokerMartini

Смежные вопросы