class AdminWidget(QTabWidget): def __init__(self, parent=None): self.__users = None self.user_service = UserService(self) super(AdminWidget, self).__init__(parent) self.button_add_user = QPushButton('Add user') self.button_remove_user = QPushButton('Remove user') self.user_search_input = QLineEdit() self.user_list = QListWidget() self.button_logout = QPushButton('Logout') self.user_search_input.setPlaceholderText('Search users') self.user_list.setMinimumWidth(400) left_column = QVBoxLayout() left_column.addWidget(self.button_add_user) left_column.addWidget(self.button_remove_user) left_column.addStretch() left_column.addWidget(self.button_logout) right_column = QVBoxLayout() right_column.addWidget(self.user_search_input) right_column.addWidget(self.user_list) layout = QHBoxLayout() layout.addLayout(left_column) layout.addLayout(right_column) widget = QWidget() widget.setLayout(layout) self.addTab(widget, 'Users manager') self.addTab(UserWidget(parent), 'Books manager') self.button_add_user.clicked.connect(self.add_user) self.button_remove_user.clicked.connect( lambda: self.user_service.delete_user( self.__users[self.user_list.currentRow()] ) ) self.user_search_input.textChanged.connect(self.refresh) self.user_list.currentRowChanged.connect(self.user_choice) self.button_logout.clicked.connect(parent.request_logout) @pyqtSlot() def refresh(self): self.user_list.clear() self.search() self.user_list.addItems([user['username'] for user in self.__users]) def search(self): self.__users = self.user_service.users search = self.user_search_input.text().lower() if search is not None: self.__users = filter(lambda x: True if x['username'].lower().find(search) > -1 else False, self.__users) self.__users = list(self.__users) def user_choice(self, index): if self.__users[index]['username'] == UserService.username: self.button_remove_user.setEnabled(False) else: self.button_remove_user.setEnabled(True) def add_user(self): ok, user = AddUserDialog().get_result(self) if not ok: return self.user_service.add_user(user)