class QuadView(QWidget): def __init__(self, parent, view1, view2, view3, view4=None): QWidget.__init__(self, parent) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.installEventFilter(self) self.dockableContainer = [] self.layout = QVBoxLayout() self.setLayout(self.layout) self.layout.setContentsMargins(0, 0, 0, 0) self.layout.setSpacing(0) self.splitVertical = QSplitter(Qt.Vertical, self) self.layout.addWidget(self.splitVertical) self.splitHorizontal1 = QSplitter(Qt.Horizontal, self.splitVertical) self.splitHorizontal1.setObjectName("splitter1") self.splitHorizontal2 = QSplitter(Qt.Horizontal, self.splitVertical) self.splitHorizontal2.setObjectName("splitter2") self.splitHorizontal1.splitterMoved.connect(self.horizontalSplitterMoved) self.splitHorizontal2.splitterMoved.connect(self.horizontalSplitterMoved) self.imageView2D_1 = view1 self.imageView2D_2 = view2 self.imageView2D_3 = view3 self.dock1_ofSplitHorizontal1 = ImageView2DDockWidget(self.imageView2D_1) self.dock1_ofSplitHorizontal1.connectHud() self.dockableContainer.append(self.dock1_ofSplitHorizontal1) self.dock1_ofSplitHorizontal1.onDockButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal1: self.on_dock(arg) ) self.dock1_ofSplitHorizontal1.onMaxButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal1: self.on_max(arg) ) self.dock1_ofSplitHorizontal1.onMinButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal1: self.on_min(arg) ) self.splitHorizontal1.addWidget(self.dock1_ofSplitHorizontal1) self.dock2_ofSplitHorizontal1 = ImageView2DDockWidget(self.imageView2D_2) self.dock2_ofSplitHorizontal1.onDockButtonClicked.connect( lambda arg=self.dock2_ofSplitHorizontal1: self.on_dock(arg) ) self.dock2_ofSplitHorizontal1.onMaxButtonClicked.connect( lambda arg=self.dock2_ofSplitHorizontal1: self.on_max(arg) ) self.dock2_ofSplitHorizontal1.onMinButtonClicked.connect( lambda arg=self.dock2_ofSplitHorizontal1: self.on_min(arg) ) self.dock2_ofSplitHorizontal1.connectHud() self.dockableContainer.append(self.dock2_ofSplitHorizontal1) self.splitHorizontal1.addWidget(self.dock2_ofSplitHorizontal1) self.dock1_ofSplitHorizontal2 = ImageView2DDockWidget(self.imageView2D_3) self.dock1_ofSplitHorizontal2.onDockButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal2: self.on_dock(arg) ) self.dock1_ofSplitHorizontal2.onMaxButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal2: self.on_max(arg) ) self.dock1_ofSplitHorizontal2.onMinButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal2: self.on_min(arg) ) self.dock1_ofSplitHorizontal2.connectHud() self.dockableContainer.append(self.dock1_ofSplitHorizontal2) self.splitHorizontal2.addWidget(self.dock1_ofSplitHorizontal2) self.dock2_ofSplitHorizontal2 = ImageView2DDockWidget(view4) self.dockableContainer.append(self.dock2_ofSplitHorizontal2) self.splitHorizontal2.addWidget(self.dock2_ofSplitHorizontal2) # this is a hack: with 0 ms it does not work... QTimer.singleShot(250, self._resizeEqual) def _resizeEqual(self): if not all([dock.isVisible() for dock in self.dockableContainer]): return w, h = ( self.size().width() - self.splitHorizontal1.handleWidth(), self.size().height() - self.splitVertical.handleWidth(), ) self.splitVertical.setSizes([h // 2, h // 2]) if self.splitHorizontal1.count() == 2 and self.splitHorizontal2.count() == 2: # docks = [self.imageView2D_1, self.imageView2D_2, self.imageView2D_3, self.testView4] docks = [] for splitter in [self.splitHorizontal1, self.splitHorizontal2]: for i in range(splitter.count()): docks.append(splitter.widget(i).graphicsView) w1 = [docks[i].minimumSize().width() for i in [0, 2]] w2 = [docks[i].minimumSize().width() for i in [1, 3]] wLeft = max(w1) wRight = max(w2) if wLeft > wRight and wLeft > w // 2: wRight = w - wLeft elif wRight >= wLeft and wRight > w // 2: wLeft = w - wRight else: wLeft = w // 2 wRight = w // 2 self.splitHorizontal1.setSizes([wLeft, wRight]) self.splitHorizontal2.setSizes([wLeft, wRight]) def eventFilter(self, obj, event): if event.type() in [QEvent.WindowActivate, QEvent.Show]: self._synchronizeSplitter() return False def _synchronizeSplitter(self): sizes1 = self.splitHorizontal1.sizes() sizes2 = self.splitHorizontal2.sizes() if len(sizes1) > 0 and sizes1[0] > 0: self.splitHorizontal2.setSizes(sizes1) elif len(sizes2) > 0 and sizes2[0] > 0: self.splitHorizontal1.setSizes(sizes2) def resizeEvent(self, event): QWidget.resizeEvent(self, event) self._synchronizeSplitter() def horizontalSplitterMoved(self, x, y): if self.splitHorizontal1.count() != 2 or self.splitHorizontal2.count() != 2: return sizes = self.splitHorizontal1.sizes() # What. Nr2 if self.splitHorizontal2.closestLegalPosition(x, y) < self.splitHorizontal2.closestLegalPosition(x, y): sizeLeft = self.splitHorizontal1.closestLegalPosition(x, y) else: sizeLeft = self.splitHorizontal2.closestLegalPosition(x, y) sizeRight = sizes[0] + sizes[1] - sizeLeft sizes = [sizeLeft, sizeRight] self.splitHorizontal1.setSizes(sizes) self.splitHorizontal2.setSizes(sizes) def addStatusBar(self, bar): self.statusBar = bar self.layout.addLayout(self.statusBar) def setGrayScaleToQuadStatusBar(self, gray): self.quadViewStatusBar.setGrayScale(gray) def setMouseCoordsToQuadStatusBar(self, x, y, z): self.quadViewStatusBar.setMouseCoords(x, y, z) def ensureMaximized(self, axis): """ Maximize the view for the given axis if it isn't already maximized. """ axisDict = { 0: self.dock2_ofSplitHorizontal1, # x 1: self.dock1_ofSplitHorizontal2, # y 2: self.dock1_ofSplitHorizontal1, } # z if not axisDict[axis]._isMaximized: self.switchMinMax(axis) def ensureMinimized(self, axis): """ Minimize the view for the given axis if it isn't already minimized. """ axisDict = { 0: self.dock2_ofSplitHorizontal1, # x 1: self.dock1_ofSplitHorizontal2, # y 2: self.dock1_ofSplitHorizontal1, } # z if axisDict[axis]._isMaximized: self.switchMinMax(axis) def switchMinMax(self, axis): """Switch an AxisViewWidget between from minimized to maximized and vice versa. Keyword arguments: axis -- the axis which is represented by the widget (no default) either string or integer 'x' - 0 'y' - 1 'z' - 2 """ # TODO: get the mapping information from where it is set! if this is not # done properly - do it properly if type(axis) == str: axisDict = { "x": self.dock2_ofSplitHorizontal1, # x "y": self.dock1_ofSplitHorizontal2, # y "z": self.dock1_ofSplitHorizontal1, } # z elif type(axis) == int: axisDict = { 0: self.dock2_ofSplitHorizontal1, # x 1: self.dock1_ofSplitHorizontal2, # y 2: self.dock1_ofSplitHorizontal1, } # z dockWidget = axisDict.pop(axis) for dWidget in list(axisDict.values()): if dWidget._isMaximized: dWidget.graphicsView._hud.maximizeButtonClicked.emit() dockWidget.graphicsView._hud.maximizeButtonClicked.emit() def switchXMinMax(self): self.switchMinMax("x") def switchYMinMax(self): self.switchMinMax("y") def switchZMinMax(self): self.switchMinMax("z") def on_dock(self, dockWidget): if dockWidget._isDocked: dockWidget.undockView() self.on_min(dockWidget) dockWidget.minimizeView() else: dockWidget.dockView() def on_max(self, dockWidget): dockWidget.setVisible(True) for dock in self.dockableContainer: if not dockWidget == dock: dock.setVisible(False) # Force sizes to be updated now QApplication.processEvents() # On linux, the vertical splitter doesn't seem to refresh unless we do so manually # Presumably, this is a QT bug. self.splitVertical.refresh() # Viewport doesn't update automatically... view = dockWidget.graphicsView view.viewport().setGeometry(view.rect()) def on_min(self, dockWidget): for dock in self.dockableContainer: dock.setVisible(True) # Force sizes to be updated now QApplication.processEvents() self._resizeEqual() # Viewports don't update automatically... for dock in self.dockableContainer: view = dock.graphicsView if hasattr(view, "viewport"): view.viewport().setGeometry(view.rect())
class QuadView(QWidget): def __init__(self, parent, view1, view2, view3, view4=None): QWidget.__init__(self, parent) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.installEventFilter(self) self.dockableContainer = [] self.layout = QVBoxLayout() self.setLayout(self.layout) self.layout.setContentsMargins(0, 0, 0, 0) self.layout.setSpacing(0) self.splitVertical = QSplitter(Qt.Vertical, self) self.layout.addWidget(self.splitVertical) self.splitHorizontal1 = QSplitter(Qt.Horizontal, self.splitVertical) self.splitHorizontal1.setObjectName("splitter1") self.splitHorizontal2 = QSplitter(Qt.Horizontal, self.splitVertical) self.splitHorizontal2.setObjectName("splitter2") self.splitHorizontal1.splitterMoved.connect( self.horizontalSplitterMoved) self.splitHorizontal2.splitterMoved.connect( self.horizontalSplitterMoved) self.imageView2D_1 = view1 self.imageView2D_2 = view2 self.imageView2D_3 = view3 self.dock1_ofSplitHorizontal1 = ImageView2DDockWidget( self.imageView2D_1) self.dock1_ofSplitHorizontal1.connectHud() self.dockableContainer.append(self.dock1_ofSplitHorizontal1) self.dock1_ofSplitHorizontal1.onDockButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal1: self.on_dock(arg)) self.dock1_ofSplitHorizontal1.onMaxButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal1: self.on_max(arg)) self.dock1_ofSplitHorizontal1.onMinButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal1: self.on_min(arg)) self.splitHorizontal1.addWidget(self.dock1_ofSplitHorizontal1) self.dock2_ofSplitHorizontal1 = ImageView2DDockWidget( self.imageView2D_2) self.dock2_ofSplitHorizontal1.onDockButtonClicked.connect( lambda arg=self.dock2_ofSplitHorizontal1: self.on_dock(arg)) self.dock2_ofSplitHorizontal1.onMaxButtonClicked.connect( lambda arg=self.dock2_ofSplitHorizontal1: self.on_max(arg)) self.dock2_ofSplitHorizontal1.onMinButtonClicked.connect( lambda arg=self.dock2_ofSplitHorizontal1: self.on_min(arg)) self.dock2_ofSplitHorizontal1.connectHud() self.dockableContainer.append(self.dock2_ofSplitHorizontal1) self.splitHorizontal1.addWidget(self.dock2_ofSplitHorizontal1) self.dock1_ofSplitHorizontal2 = ImageView2DDockWidget( self.imageView2D_3) self.dock1_ofSplitHorizontal2.onDockButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal2: self.on_dock(arg)) self.dock1_ofSplitHorizontal2.onMaxButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal2: self.on_max(arg)) self.dock1_ofSplitHorizontal2.onMinButtonClicked.connect( lambda arg=self.dock1_ofSplitHorizontal2: self.on_min(arg)) self.dock1_ofSplitHorizontal2.connectHud() self.dockableContainer.append(self.dock1_ofSplitHorizontal2) self.splitHorizontal2.addWidget(self.dock1_ofSplitHorizontal2) self.dock2_ofSplitHorizontal2 = ImageView2DDockWidget(view4) self.dockableContainer.append(self.dock2_ofSplitHorizontal2) self.splitHorizontal2.addWidget(self.dock2_ofSplitHorizontal2) #this is a hack: with 0 ms it does not work... QTimer.singleShot(250, self._resizeEqual) def _resizeEqual(self): if not all([dock.isVisible() for dock in self.dockableContainer]): return w, h = self.size().width() - self.splitHorizontal1.handleWidth( ), self.size().height() - self.splitVertical.handleWidth() self.splitVertical.setSizes([h // 2, h // 2]) if self.splitHorizontal1.count() == 2 and self.splitHorizontal2.count( ) == 2: #docks = [self.imageView2D_1, self.imageView2D_2, self.imageView2D_3, self.testView4] docks = [] for splitter in [self.splitHorizontal1, self.splitHorizontal2]: for i in range(splitter.count()): docks.append(splitter.widget(i).graphicsView) w1 = [docks[i].minimumSize().width() for i in [0, 2]] w2 = [docks[i].minimumSize().width() for i in [1, 3]] wLeft = max(w1) wRight = max(w2) if wLeft > wRight and wLeft > w // 2: wRight = w - wLeft elif wRight >= wLeft and wRight > w // 2: wLeft = w - wRight else: wLeft = w // 2 wRight = w // 2 self.splitHorizontal1.setSizes([wLeft, wRight]) self.splitHorizontal2.setSizes([wLeft, wRight]) def eventFilter(self, obj, event): if (event.type() in [QEvent.WindowActivate, QEvent.Show]): self._synchronizeSplitter() return False def _synchronizeSplitter(self): sizes1 = self.splitHorizontal1.sizes() sizes2 = self.splitHorizontal2.sizes() if len(sizes1) > 0 and sizes1[0] > 0: self.splitHorizontal2.setSizes(sizes1) elif len(sizes2) > 0 and sizes2[0] > 0: self.splitHorizontal1.setSizes(sizes2) def resizeEvent(self, event): QWidget.resizeEvent(self, event) self._synchronizeSplitter() def horizontalSplitterMoved(self, x, y): if self.splitHorizontal1.count() != 2 or self.splitHorizontal2.count( ) != 2: return sizes = self.splitHorizontal1.sizes() #What. Nr2 if self.splitHorizontal2.closestLegalPosition( x, y) < self.splitHorizontal2.closestLegalPosition(x, y): sizeLeft = self.splitHorizontal1.closestLegalPosition(x, y) else: sizeLeft = self.splitHorizontal2.closestLegalPosition(x, y) sizeRight = sizes[0] + sizes[1] - sizeLeft sizes = [sizeLeft, sizeRight] self.splitHorizontal1.setSizes(sizes) self.splitHorizontal2.setSizes(sizes) def addStatusBar(self, bar): self.statusBar = bar self.layout.addLayout(self.statusBar) def setGrayScaleToQuadStatusBar(self, gray): self.quadViewStatusBar.setGrayScale(gray) def setMouseCoordsToQuadStatusBar(self, x, y, z): self.quadViewStatusBar.setMouseCoords(x, y, z) def ensureMaximized(self, axis): """ Maximize the view for the given axis if it isn't already maximized. """ axisDict = { 0: self.dock2_ofSplitHorizontal1, # x 1: self.dock1_ofSplitHorizontal2, # y 2: self.dock1_ofSplitHorizontal1 } # z if not axisDict[axis]._isMaximized: self.switchMinMax(axis) def ensureMinimized(self, axis): """ Minimize the view for the given axis if it isn't already minimized. """ axisDict = { 0: self.dock2_ofSplitHorizontal1, # x 1: self.dock1_ofSplitHorizontal2, # y 2: self.dock1_ofSplitHorizontal1 } # z if axisDict[axis]._isMaximized: self.switchMinMax(axis) def switchMinMax(self, axis): """Switch an AxisViewWidget between from minimized to maximized and vice versa. Keyword arguments: axis -- the axis which is represented by the widget (no default) either string or integer 'x' - 0 'y' - 1 'z' - 2 """ #TODO: get the mapping information from where it is set! if this is not #done properly - do it properly if type(axis) == str: axisDict = { 'x': self.dock2_ofSplitHorizontal1, # x 'y': self.dock1_ofSplitHorizontal2, # y 'z': self.dock1_ofSplitHorizontal1 } # z elif type(axis) == int: axisDict = { 0: self.dock2_ofSplitHorizontal1, # x 1: self.dock1_ofSplitHorizontal2, # y 2: self.dock1_ofSplitHorizontal1 } # z dockWidget = axisDict.pop(axis) for dWidget in list(axisDict.values()): if dWidget._isMaximized: dWidget.graphicsView._hud.maximizeButtonClicked.emit() dockWidget.graphicsView._hud.maximizeButtonClicked.emit() def switchXMinMax(self): self.switchMinMax('x') def switchYMinMax(self): self.switchMinMax('y') def switchZMinMax(self): self.switchMinMax('z') def on_dock(self, dockWidget): if dockWidget._isDocked: dockWidget.undockView() self.on_min(dockWidget) dockWidget.minimizeView() else: dockWidget.dockView() def on_max(self, dockWidget): dockWidget.setVisible(True) for dock in self.dockableContainer: if not dockWidget == dock: dock.setVisible(False) # Force sizes to be updated now QApplication.processEvents() # On linux, the vertical splitter doesn't seem to refresh unless we do so manually # Presumably, this is a QT bug. self.splitVertical.refresh() # Viewport doesn't update automatically... view = dockWidget.graphicsView view.viewport().setGeometry(view.rect()) def on_min(self, dockWidget): for dock in self.dockableContainer: dock.setVisible(True) # Force sizes to be updated now QApplication.processEvents() self._resizeEqual() # Viewports don't update automatically... for dock in self.dockableContainer: view = dock.graphicsView if hasattr(view, 'viewport'): view.viewport().setGeometry(view.rect())
class BPWidget(QWidget): def __init__(self, patient_id, patient_ids): QWidget.__init__(self) self.disabled = False self.chart_range = (-1, -1) self.visible_rows = -1 self.patient_id = patient_id self.table = self.load_contents( patient_ids[patient_id] if patient_id else {}) self.combo = QComboBox(self) if not self.patient_id: self.combo.addItem('') for id in patient_ids: self.combo.addItem(id_plus_name(id, patient_ids)) self.combo.setCurrentText(id_plus_name(patient_id, patient_ids)) self.combo.currentIndexChanged.connect(self.selection_change) # QWidget Layout self.main_layout = QHBoxLayout() self.left = QVBoxLayout() self.left.addWidget(self.combo, 1) self.left.addWidget(self.table, 7) self.table.verticalScrollBar().valueChanged.connect(self.scroll_change) self.main_layout.addLayout(self.left, 1) self.bpcanvas, self.pulcanvas = self.load_charts( self.data[len(self.data) - 24:] if len(self.data) > 24 else self.data, patient_ids[patient_id] if patient_id else {}) self.figures = QSplitter(Qt.Vertical) self.figures.addWidget(self.bpcanvas) self.figures.addWidget(self.pulcanvas) self.main_layout.addWidget(self.figures, 4) # Set the layout to the QWidget self.setLayout(self.main_layout) self.adjustSize() def load_contents(self, patient_info): if self.patient_id: self.data = bpm_db.read_measurements(self.patient_id) else: self.data = [] return BloodPressureTable(self.data, patient_info) def load_charts(self, data, patient_info): SECS_PER_DAY = 60 * 60 * 24 ddates = [d['date'].toSecsSinceEpoch() for d in data] dates = [] xticks = [] for d in ddates: day = secs_at_midnight(d) if not xticks or xticks[-1] != day: xticks.append(day) dates.append(len(xticks) - 1 + (d - day) / SECS_PER_DAY) xlabels = [ QDateTime.fromSecsSinceEpoch(tck).toString(XAXIS_FMT) for tck in xticks ] xticks = [x for x in range(len(xticks))] bpfig = Figure(figsize=(800, 600), dpi=72, facecolor=(1, 1, 1), edgecolor=(0, 0, 0)) ax = bpfig.add_subplot(111) ax.plot(dates, [d['sys'] for d in data], 'b') ax.plot(dates, [d['dia'] for d in data], 'g') if dates: systolic_limit = bpm_db.SYSTOLIC_LIMIT if 'systolic_limit' in patient_info: systolic_limit = patient_info['systolic_limit'] diastolic_limit = bpm_db.DIASTOLIC_LIMIT if 'diastolic_limit' in patient_info: diastolic_limit = patient_info['diastolic_limit'] xaxis = [xticks[0], dates[-1]] if systolic_limit: ax.plot(xaxis, [systolic_limit] * 2, 'r:') if diastolic_limit: ax.plot(xaxis, [diastolic_limit] * 2, 'r:') ax.grid(True) ax.set_ylabel('mm Hg') ax.set_title('Blood Pressure') ax.set_xticks(xticks) ax.set_xticklabels(xlabels) pulfig = Figure(figsize=(800, 350), dpi=72, facecolor=(1, 1, 1), edgecolor=(0, 0, 0)) ax = pulfig.add_subplot(111) ax.plot(dates, [d['pulse'] for d in data], 'c') if dates: ax.grid(True) ax.set_ylabel('/ min') ax.set_title('Pulse') ax.set_xticks(xticks) ax.set_xticklabels(xlabels) return FigureCanvas(bpfig), FigureCanvas(pulfig) def selection_change(self, i): patient_id = self.combo.itemText(i).split(' ')[0] if not self.disabled and patient_id != self.patient_id: self.disabled = True self.parent().set_status_message(patient_id) self.parent().setCentralWidget( BPWidget(patient_id, self.parent().patient_ids)) def scroll_change(self): if not self.disabled: scroll_bar = self.table.verticalScrollBar() if scroll_bar.isVisible(): value = scroll_bar.value() if self.visible_rows == -1: self.visible_rows = 0 height = self.table.height() for i in range(len(self.data)): rect = self.table.visualItemRect(self.table.item(i, 1)) if rect.y() + rect.height() >= 0 and rect.y() < height: self.visible_rows += 1 if self.chart_range != (value, value + self.visible_rows): self.chart_range = (value, value + self.visible_rows) bpcanvas, pulcanvas = self.load_charts( self.data[value:value + self.visible_rows], self.parent().patient_ids[self.patient_id] if self.patient_id else {}) self.figures.replaceWidget(0, bpcanvas) self.figures.replaceWidget(1, pulcanvas) self.figures.refresh() self.bpcanvas = bpcanvas self.pulcanvas = pulcanvas
class Window(QDialog): def __init__(self): super().__init__() # Flags points if the connection is open for this user name self.reg = False self.user = "" self.status = "offline" self.label = QLabel(self.user, self) self.label.setAlignment(Qt.AlignCenter) self.label.setStyleSheet("QLabel {color: blue;}") self.status = QLabel(self.status, self) self.status.setAlignment(Qt.AlignCenter) self.status.setStyleSheet("QLabel {color: grey;}") self.btnSend = QPushButton("Send", self) self.btnSendFont = self.btnSend.font() self.btnSend.clicked.connect(self.send) self.btnLink = QPushButton("Disconnect", self) self.btnLinkFont = self.btnLink.font() self.btnLink.clicked.connect(self.disconnect_socket) # cbFlag makes sure that all client list is added once # Then updated one at the time on new or left users. self.cbFlag = True self.cblist = [] self.cb = QComboBox() self.cb.addItem("ALL") self.chatBody = QVBoxLayout(self) self.chat = QTextEdit() self.chat.setReadOnly(True) self.chatTextField = QLineEdit(self) self.target = "" self.splitter1 = QSplitter(QtCore.Qt.Vertical) self.splitter1.addWidget(self.chat) self.splitter1.addWidget(self.chatTextField) self.splitter1.addWidget(self.status) self.splitter2 = QSplitter(QtCore.Qt.Horizontal) self.splitter2.addWidget(self.cb) self.splitter2.addWidget(self.btnSend) self.splitter2.addWidget(self.btnLink) self.splitter3 = QSplitter(QtCore.Qt.Vertical) self.splitter3.addWidget(self.splitter1) self.splitter3.addWidget(self.splitter2) self.chatBody.addWidget(self.splitter3) self.resize(500, 500) def login(self): text, okPressed = QInputDialog.getText(self, "Login", "Your name:") if okPressed and text != "": self.user = text self.setWindowTitle("Slac chat. User: "******"No valid user. system closed.") sys.exit(app.exec_()) def combo_population(self, clients): if len(clients) > 0: for client in clients: self.cblist.append(client) self.cb.addItems(clients) self.cbFlag = False def send(self): try: text = self.chatTextField.text() if not text: QMessageBox.about(self, "Error", "Add a message to send") except ValueError as e: print(e) # message gets header from combobox header = self.cb.currentText() message = "{" + header + "}" + text self.chatTextField.setText("") return message def connect(self): self.status.setText("Online") self.btnLink.setText("Disconnect") self.reg = True self.splitter2.refresh() print("self.reg when connect button") print(self.reg) def disconnect(self): self.status.setText("Offline") self.btnLink.setText("Connect") self.reg = False self.splitter2.refresh() print("self.reg when disconnect button") print(self.reg) def defineTarget(self): pass