Esempio n. 1
0
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)

        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)

        self.init_tabs()

        self.MainWindow.show()
        sys.exit(app.exec_())
Esempio n. 2
0
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)

        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)

        self.ui.button_stop_animation.clicked.connect(self.stop_animation)
        self.ui.button_start_animation.clicked.connect(self.animate)

        self.init_tabs()

        self.MainWindow.show()
        sys.exit(app.exec_())
Esempio n. 3
0
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)

        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)

        self.ui.button_stop_animation.clicked.connect(self.stop_animation)
        self.ui.button_start_animation.clicked.connect(self.animate)

        self.ui.toolButton.hide()
        self.move_toolbutton = MoveToolButton(self.ui.tab_animation)
        self.move_toolbutton.setGeometry(QtCore.QRect(330, 20, 25, 19))
        self.move_toolbutton.setAutoFillBackground(True)
        self.move_toolbutton.setText("***")

        self.init_tabs()

        self.MainWindow.show()
        sys.exit(app.exec_())
class MainWindow_EXEC():
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)

        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)
        #--------------------------

        self.ui.button_stop_animation.clicked.connect(self.stop_animation)
        self.ui.button_start_animation.clicked.connect(self.animate)

        #--------------------------
        self.init_tabs()

        self.MainWindow.show()
        sys.exit(app.exec_())

    #----------------------------------------------------------
    def stop_animation(self):
        try:
            self.animated_frame.stop()
        except:
            pass

    #----------------------------------------------------------
    def animate(self):
        self.animated_frame = QtCore.QPropertyAnimation(
            self.ui.frame, b'geometry')
        self.animated_frame.setDuration(10000)
        self.animated_frame.setStartValue(QtCore.QRect(10, 10, 100, 100))
        self.animated_frame.setEndValue(QtCore.QRect(10, 10, 200, 200))
        self.animated_frame.start()
        self.animated_frame.finished.connect(
            lambda: self.ui.frame.setFrameStyle(QtWidgets.QFrame.Box))

    #----------------------------------------------------------
    def sql_delete_row(self):
        if self.model:
            self.model.removeRow(self.ui.tableView.currentIndex().row())
        else:
            self.sql_tableview_model()

    #----------------------------------------------------------
    def sql_add_row(self):
        if self.model:
            self.model.insertRows(self.model.rowCount(), 1)
        else:
            self.sql_tableview_model()

    #----------------------------------------------------------
    def sql_tableview_model(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('PEOPLE.db')

        tableview = self.ui.tableView
        self.model = QtSql.QSqlTableModel()
        tableview.setModel(self.model)

        self.model.setTable('PERSON')
        self.model.setEditStrategy(
            QtSql.QSqlTableModel.OnFieldChange
        )  # All changes to the model will be applied immediately to the database
        self.model.select()
        self.model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
        self.model.setHeaderData(1, QtCore.Qt.Horizontal, "First name")
        self.model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name")

    #----------------------------------------------------------
    def print_data(self):
        sqlite_file = 'PEOPLE.db'
        conn = sqlite3.connect(sqlite_file)
        cursor = conn.cursor()

        cursor.execute("SELECT * FROM 'PERSON' ORDER BY ID")
        all_rows = cursor.fetchall()
        pprint(all_rows)

        conn.commit()  # not needed when only selecting data
        conn.close()

    #----------------------------------------------------------
    def create_DB(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('PEOPLE.db')
        db.open()

        query = QtSql.QSqlQuery()

        query.exec_("create table PERSON(ID int primary key, "
                    "FIRST_NAME varchar(20), LAST_NAME varchar(20))")
        query.exec_("insert into PERSON values(1000, 'Albert', 'Einstein')")
        query.exec_("insert into PERSON values(1001, 'Guido', 'van Rossum')")
        query.exec_("insert into PERSON values(1002, 'Steve', 'Jobs')")
        query.exec_("insert into PERSON values(1003, 'Bill', 'Gates')")

    #----------------------------------------------------------
    def connect_to_server_1(self):
        # create a client, passing in UI widget references
        self.tcp_client_1 = TcpClient(
            line_edit_widget=self.ui.lineEdit_client_1,
            text_widget=self.ui.textEdit_client_1)
        self.tcp_client_1.connect_server()
        self.ui.button_client_1.setEnabled(False)

        # Signals and slots for networking
        self.tcp_client_1.socket.readyRead.connect(self.tcp_client_1.read_data)
        self.tcp_client_1.socket.disconnected.connect(self.server_disconnect_1)
        self.tcp_client_1.socket.error.connect(self.server_error_1)

    def server_disconnect_1(self):
        self.tcp_client_1.socket.close()
        self.ui.button_client_1.setEnabled(True)

    def server_error_1(self):
        error = "Error: {}".format(self.tcp_client_1.socket.errorString())
        self.display_text_1(error)
        self.tcp_client_1.socket.close()
        self.ui.button_client_1.setEnabled(True)

    def display_text_1(self, text):
        self.ui.textEdit_client_1.append(text)

    def send_data_1(self):
        try:
            self.tcp_client_1.write_data()
        except:
            pass

    #----------------------------------------------------------
    def connect_to_server_2(self):
        # create a client, passing in UI widget references
        self.tcp_client_2 = TcpClient(
            line_edit_widget=self.ui.lineEdit_client_2,
            text_widget=self.ui.textEdit_client_2)
        self.tcp_client_2.connect_server()
        self.ui.button_client_2.setEnabled(False)

        # Signals and slots for networking
        self.tcp_client_2.socket.readyRead.connect(self.tcp_client_2.read_data)
        self.tcp_client_2.socket.disconnected.connect(self.server_disconnect_2)
        self.tcp_client_2.socket.error.connect(self.server_error_2)

    def server_disconnect_2(self):
        self.tcp_client_2.socket.close()
        self.ui.button_client_2.setEnabled(True)

    def server_error_2(self):
        error = "Error: {}".format(self.tcp_client_2.socket.errorString())
        self.display_text_2(error)
        self.tcp_client_2.socket.close()
        self.ui.button_client_2.setEnabled(True)

    def display_text_2(self, text):
        self.ui.textEdit_client_2.append(text)

    def send_data_2(self):
        try:
            self.tcp_client_2.write_data()
        except:
            pass

    #----------------------------------------------------------
    def start_server(self):
        self.tcp_server = TcpServer()

    #----------------------------------------------------------
    def init_tabs(self):

        #--------------------------
        #         self.create_DB()
        self.ui.button_SQL_view_data.clicked.connect(self.print_data)
        self.model = None
        self.ui.button_SQL_view_data.clicked.connect(self.sql_tableview_model)
        self.ui.button_SQL_add.clicked.connect(self.sql_add_row)
        self.ui.button_SQL_delete.clicked.connect(self.sql_delete_row)

        #--------------------------
        self.ui.button_start_server.clicked.connect(self.start_server)
        # Signals and slots for clients
        self.ui.button_client_1.clicked.connect(self.connect_to_server_1)
        self.ui.lineEdit_client_1.returnPressed.connect(self.send_data_1)
        self.ui.button_client_2.clicked.connect(self.connect_to_server_2)
        self.ui.lineEdit_client_2.returnPressed.connect(self.send_data_2)

        #--------------------------
        open_gl = PyQtOpenGL(
            parent=self.ui.frame_gl
        )  # create class instance, passing in the tab as parent
        open_gl.setMinimumSize(
            300, 300)  # keep proportions, set to same size as frame
        open_gl.paint_0 = False
        open_gl.paint_1 = False
        open_gl.paint_2 = False
        open_gl.resize_lines = False
        open_gl.paint_rotation = False

        #--------------------------
        self.ui.comboBox.hide()
        self.drop_combo = DragDropCombo(self.MainWindow)
        self.drop_combo.setMinimumSize(QtCore.QSize(141, 0))
        self.ui.horizontalLayout_2.addWidget(self.drop_combo)

        #--------------------------
        self.ui.pushButton.hide()
        #         self.ui.pushButton.setParent(None)  # deleting parent deletes the button
        self.drop_button = DragDropButton('DropButton', self.MainWindow)
        self.drop_button.setMinimumSize(QtCore.QSize(161, 0))
        self.ui.horizontalLayout_2.addWidget(self.drop_button)

        #--------------------------
        self.update_tree()
        self.update_calendar()
        self.update_progressbar()

    #----------------------------------------------------------
    def update_tree(self):
        self.ui.treeWidget.headerItem().setText(1, 'Header 2')
        self.ui.treeWidget.topLevelItem(0).setText(1, "Item 2")
        self.ui.treeWidget.topLevelItem(0).addChild(
            QtWidgets.QTreeWidgetItem())
        self.ui.treeWidget.topLevelItem(0).child(0).setText(1, "Subitem 2")

    def print_tree(self):
        header0 = self.ui.treeWidget.headerItem().text(0)
        header1 = self.ui.treeWidget.headerItem().text(1)
        print(header0 + '\n' + header1 + '\n')

    #----------------------------------------------------------
    def update_calendar(self):
        self.ui.calendarWidget.selectionChanged.connect(self.update_date)

    def update_date(self):
        self.ui.dateEdit.setDate(self.ui.calendarWidget.selectedDate())

    #----------------------------------------------------------
    def update_progressbar(self):
        self.ui.radioButton_start.clicked.connect(self.start_progressbar)
        self.ui.radioButton_stop.clicked.connect(self.stop_progressbar)
        self.ui.radioButton_reset.clicked.connect(self.reset_progressbar)
        self.progress_value = 0
        self.stop_progress = False

    def progressbar_counter(self, start_value=0):
        self.run_thread = RunThread(parent=None, counter_start=start_value)
        self.run_thread.start()
        self.run_thread.counter_value.connect(self.set_progressbar)

    def set_progressbar(self, counter):
        if not self.stop_progress:
            self.ui.progressBar.setValue(counter)

    def start_progressbar(self):
        self.stop_progress = False
        self.progress_value = self.ui.progressBar.value()
        self.progressbar_counter(self.progress_value)

    def stop_progressbar(self):
        self.stop_progress = True
        try:
            self.run_thread.stop()
        except:
            pass

    def reset_progressbar(self):
        self.stop_progressbar()
        self.progress_value = 0
        self.stop_progress = False
        self.ui.progressBar.reset()
Esempio n. 5
0
class MainWindow_EXEC():
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)

        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)

        self.ui.button_stop_animation.clicked.connect(self.stop_animation)
        self.ui.button_start_animation.clicked.connect(self.animate)

        self.ui.toolButton.hide()
        self.move_toolbutton = MoveToolButton(self.ui.tab_animation)
        self.move_toolbutton.setGeometry(QtCore.QRect(330, 20, 25, 19))
        self.move_toolbutton.setAutoFillBackground(True)
        self.move_toolbutton.setText("***")

        self.init_tabs()

        self.MainWindow.show()
        sys.exit(app.exec_())

    def stop_animation(self):
        try:
            self.animated_frame.stop()
            self.animated_lcd.stop()
            self.animated_toolbutton.stop()
        except:
            pass

    def animate(self):
        self.animated_frame = QtCore.QPropertyAnimation(
            self.ui.frame, b'geometry')
        self.animated_frame.setDuration(10000)
        self.animated_frame.setStartValue(QtCore.QRect(10, 10, 100, 100))
        self.animated_frame.setEndValue(QtCore.QRect(10, 10, 200, 200))
        self.animated_frame.start()
        self.animated_frame.finished.connect(
            lambda: self.ui.frame.setFrameStyle(QtWidgets.QFrame.Box))

        self.animated_lcd = QtCore.QPropertyAnimation(
            self.ui.lcdNumber_animation, b'value')
        self.animated_lcd.setDuration(9000)
        self.animated_lcd.setStartValue(0)
        self.animated_lcd.setEndValue(999)
        self.animated_lcd.start()
        self.animated_lcd.finished.connect(
            lambda: self.ui.lcdNumber_animation.setFrameStyle(QtWidgets.QFrame.
                                                              StyledPanel))

        self.move_toolbutton.change_palette()
        self.animated_toolbutton = QtCore.QPropertyAnimation(
            self.move_toolbutton, b'new_position')
        self.animated_toolbutton.setDuration(9000)
        self.animated_toolbutton.setStartValue(QtCore.QPoint(330, 20))
        self.animated_toolbutton.setKeyValueAt(0.2, QtCore.QPoint(398, 50))
        self.animated_toolbutton.setKeyValueAt(0.5, QtCore.QPoint(152, 120))
        self.animated_toolbutton.setKeyValueAt(0.6, QtCore.QPoint(420, 240))
        self.animated_toolbutton.setKeyValueAt(0.7, QtCore.QPoint(420, 260))
        self.animated_toolbutton.setKeyValueAt(0.9, QtCore.QPoint(330, 330))
        self.animated_toolbutton.setKeyValueAt(0.99, QtCore.QPoint(330, 310))
        self.animated_toolbutton.setEndValue(QtCore.QPoint(490, 300))
        self.animated_toolbutton.start()

        self.animated_toolbutton.finished.connect(
            lambda: self.move_toolbutton.change_palette(
                QColor('#00aa00'), QColor('#00aa00')))

    def sql_delete_row(self):
        if self.model:
            self.model.removeRow(self.ui.tableView.currentIndex().row())
        else:
            self.sql_tableview_model()

    def sql_add_row(self):
        if self.model:
            self.model.insertRows(self.model.rowCount(), 1)
        else:
            self.sql_tableview_model()

    def sql_tableview_model(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('PEOPLE.db')

        tableview = self.ui.tableView
        self.model = QtSql.QSqlTableModel()
        tableview.setModel(self.model)

        self.model.setTable('PERSON')
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
        self.model.select()
        self.model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
        self.model.setHeaderData(1, QtCore.Qt.Horizontal, "First name")
        self.model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name")

    def print_data(self):
        sqlite_file = 'PEOPLE.db'
        conn = sqlite3.connect(sqlite_file)
        cursor = conn.cursor()

        cursor.execute("SELECT * FROM 'PERSON' ORDER BY ID")
        all_rows = cursor.fetchall()
        pprint(all_rows)

        conn.commit()
        conn.close()

    def create_DB(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('PEOPLE.db')
        db.open()

        query = QtSql.QSqlQuery()

        query.exec_("create table PERSON(ID int primary key, "
                    "FIRST_NAME varchar(20), LAST_NAME varchar(20))")
        query.exec_("insert into PERSON values(1000, 'Albert', 'Einstein')")
        query.exec_("insert into PERSON values(1001, 'Guido', 'van Rossum')")
        query.exec_("insert into PERSON values(1002, 'Steve', 'Jobs')")
        query.exec_("insert into PERSON values(1003, 'Bill', 'Gates')")

    def connect_to_server_1(self):
        self.tcp_client_1 = TcpClient(
            line_edit_widget=self.ui.lineEdit_client_1,
            text_widget=self.ui.textEdit_client_1)
        self.tcp_client_1.connect_server()
        self.ui.button_client_1.setEnabled(False)

        self.tcp_client_1.socket.readyRead.connect(self.tcp_client_1.read_data)
        self.tcp_client_1.socket.disconnected.connect(self.server_disconnect_1)
        self.tcp_client_1.socket.error.connect(self.server_error_1)

    def server_disconnect_1(self):
        self.tcp_client_1.socket.close()
        self.ui.button_client_1.setEnabled(True)

    def server_error_1(self):
        error = "Error: {}".format(self.tcp_client_1.socket.errorString())
        self.display_text_1(error)
        self.tcp_client_1.socket.close()
        self.ui.button_client_1.setEnabled(True)

    def display_text_1(self, text):
        self.ui.textEdit_client_1.append(text)

    def send_data_1(self):
        try:
            self.tcp_client_1.write_data()
        except:
            pass

    def connect_to_server_2(self):
        self.tcp_client_2 = TcpClient(
            line_edit_widget=self.ui.lineEdit_client_2,
            text_widget=self.ui.textEdit_client_2)
        self.tcp_client_2.connect_server()
        self.ui.button_client_2.setEnabled(False)

        self.tcp_client_2.socket.readyRead.connect(self.tcp_client_2.read_data)
        self.tcp_client_2.socket.disconnected.connect(self.server_disconnect_2)
        self.tcp_client_2.socket.error.connect(self.server_error_2)

    def server_disconnect_2(self):
        self.tcp_client_2.socket.close()
        self.ui.button_client_2.setEnabled(True)

    def server_error_2(self):
        error = "Error: {}".format(self.tcp_client_2.socket.errorString())
        self.display_text_2(error)
        self.tcp_client_2.socket.close()
        self.ui.button_client_2.setEnabled(True)

    def display_text_2(self, text):
        self.ui.textEdit_client_2.append(text)

    def send_data_2(self):
        try:
            self.tcp_client_2.write_data()
        except:
            pass

    def start_server(self):
        self.tcp_server = TcpServer()

    def init_tabs(self):

        self.ui.button_SQL_view_data.clicked.connect(self.print_data)
        self.model = None
        self.ui.button_SQL_view_data.clicked.connect(self.sql_tableview_model)
        self.ui.button_SQL_add.clicked.connect(self.sql_add_row)
        self.ui.button_SQL_delete.clicked.connect(self.sql_delete_row)

        self.ui.button_start_server.clicked.connect(self.start_server)
        self.ui.button_client_1.clicked.connect(self.connect_to_server_1)
        self.ui.lineEdit_client_1.returnPressed.connect(self.send_data_1)
        self.ui.button_client_2.clicked.connect(self.connect_to_server_2)
        self.ui.lineEdit_client_2.returnPressed.connect(self.send_data_2)

        open_gl = PyQtOpenGL(parent=self.ui.frame_gl)
        open_gl.setMinimumSize(300, 300)
        open_gl.paint_0 = False
        open_gl.paint_1 = False
        open_gl.paint_2 = False
        open_gl.resize_lines = False
        open_gl.paint_rotation = False

        self.ui.comboBox.hide()
        self.drop_combo = DragDropCombo(self.MainWindow)
        self.drop_combo.setMinimumSize(QtCore.QSize(141, 0))
        self.ui.horizontalLayout_2.addWidget(self.drop_combo)

        self.ui.pushButton.hide()
        self.drop_button = DragDropButton('DropButton', self.MainWindow)
        self.drop_button.setMinimumSize(QtCore.QSize(161, 0))
        self.ui.horizontalLayout_2.addWidget(self.drop_button)

        self.update_tree()
        self.update_calendar()
        self.update_progressbar()

    def update_tree(self):
        self.ui.treeWidget.headerItem().setText(1, 'Header 2')
        self.ui.treeWidget.topLevelItem(0).setText(1, "Item 2")
        self.ui.treeWidget.topLevelItem(0).addChild(
            QtWidgets.QTreeWidgetItem())
        self.ui.treeWidget.topLevelItem(0).child(0).setText(1, "Subitem 2")

    def print_tree(self):
        header0 = self.ui.treeWidget.headerItem().text(0)
        header1 = self.ui.treeWidget.headerItem().text(1)
        print(header0 + '\n' + header1 + '\n')

    def update_calendar(self):
        self.ui.calendarWidget.selectionChanged.connect(self.update_date)

    def update_date(self):
        self.ui.dateEdit.setDate(self.ui.calendarWidget.selectedDate())

    def update_progressbar(self):
        self.ui.radioButton_start.clicked.connect(self.start_progressbar)
        self.ui.radioButton_stop.clicked.connect(self.stop_progressbar)
        self.ui.radioButton_reset.clicked.connect(self.reset_progressbar)
        self.progress_value = 0
        self.stop_progress = False

    def progressbar_counter(self, start_value=0):
        self.run_thread = RunThread(parent=None, counter_start=start_value)
        self.run_thread.start()
        self.run_thread.counter_value.connect(self.set_progressbar)

    def set_progressbar(self, counter):
        if not self.stop_progress:
            self.ui.progressBar.setValue(counter)

    def start_progressbar(self):
        self.stop_progress = False
        self.progress_value = self.ui.progressBar.value()
        self.progressbar_counter(self.progress_value)

    def stop_progressbar(self):
        self.stop_progress = True
        try:
            self.run_thread.stop()
        except:
            pass

    def reset_progressbar(self):
        self.stop_progressbar()
        self.progress_value = 0
        self.stop_progress = False
        self.ui.progressBar.reset()
Esempio n. 6
0
class MainWindow_EXEC():
   
    def __init__(self):
        app = QtWidgets.QApplication(sys.argv)
        
        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)
        
        self.init_tabs()
        
        self.MainWindow.show()
        sys.exit(app.exec_()) 

    def sql_delete_row(self):
        if self.model:
            self.model.removeRow(self.ui.tableView.currentIndex().row())
        else:
            self.sql_tableview_model()       

    def sql_add_row(self):
        if self.model:
            self.model.insertRows(self.model.rowCount(), 1)
        else:
            self.sql_tableview_model()
            
    def sql_tableview_model(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('PEOPLE.db')
        
        tableview = self.ui.tableView
        self.model = QtSql.QSqlTableModel()
        tableview.setModel(self.model)
        
        self.model.setTable('PERSON')
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)   # All changes to the model will be applied immediately to the database
        self.model.select()
        self.model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
        self.model.setHeaderData(1, QtCore.Qt.Horizontal, "First name")
        self.model.setHeaderData(2, QtCore.Qt.Horizontal, "Last name")


    #----------------------------------------------------------
    def print_data(self):
        sqlite_file = 'PEOPLE.db'
        conn = sqlite3.connect(sqlite_file)
        cursor = conn.cursor()
        
        cursor.execute("SELECT * FROM 'PERSON' ORDER BY ID")
        all_rows = cursor.fetchall()
        pprint(all_rows)
        
        conn.commit()       # not needed when only selecting data
        conn.close()        
        
    #----------------------------------------------------------
    def create_DB(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('PEOPLE.db')
        db.open()
        
        query = QtSql.QSqlQuery()
          
        query.exec_("create table PERSON(ID int primary key, "
                    "FIRST_NAME varchar(20), LAST_NAME varchar(20))")
        query.exec_("insert into PERSON values(1000, 'Albert', 'Einstein')")
        query.exec_("insert into PERSON values(1001, 'Guido', 'van Rossum')")
        query.exec_("insert into PERSON values(1002, 'Steve', 'Jobs')")
        query.exec_("insert into PERSON values(1003, 'Bill', 'Gates')")

   
        def connect_to_server_1(self):
        self.tcp_client_1 = TcpClient(line_edit_widget=self.ui.lineEdit_client_1, text_widget=self.ui.textEdit_client_1)
        self.tcp_client_1.connect_server()              
        self.ui.button_client_1.setEnabled(False)

        self.tcp_client_1.socket.readyRead.connect(self.tcp_client_1.read_data)
        self.tcp_client_1.socket.disconnected.connect(self.server_disconnect_1)        
        self.tcp_client_1.socket.error.connect(self.server_error_1)

    def server_disconnect_1(self):
        self.tcp_client_1.socket.close()
        self.ui.button_client_1.setEnabled(True)
        
    def server_error_1(self):
        error = "Error: {}".format(self.tcp_client_1.socket.errorString())
        self.display_text_1(error)
        self.tcp_client_1.socket.close()
        self.ui.button_client_1.setEnabled(True)    

    def display_text_1(self, text):
        self.ui.textEdit_client_1.append(text) 

    def send_data_1(self):
        try: self.tcp_client_1.write_data()
        except: pass 
                
    def connect_to_server_2(self):

        self.tcp_client_2 = TcpClient(line_edit_widget=self.ui.lineEdit_client_2, text_widget=self.ui.textEdit_client_2)
        self.tcp_client_2.connect_server()              
        self.ui.button_client_2.setEnabled(False)
        
        self.tcp_client_2.socket.readyRead.connect(self.tcp_client_2.read_data)
        self.tcp_client_2.socket.disconnected.connect(self.server_disconnect_2)        
        self.tcp_client_2.socket.error.connect(self.server_error_2)

    def server_disconnect_2(self):
        self.tcp_client_2.socket.close()
        self.ui.button_client_2.setEnabled(True)
        
    def server_error_2(self):
        error = "Error: {}".format(self.tcp_client_2.socket.errorString())
        self.display_text_2(error)
        self.tcp_client_2.socket.close()
        self.ui.button_client_2.setEnabled(True)    

    def display_text_2(self, text):
        self.ui.textEdit_client_2.append(text) 

    def send_data_2(self):
        try: self.tcp_client_2.write_data() 
        except: pass  
               
    def start_server(self):
        self.tcp_server = TcpServer()
                
    def init_tabs(self):
        
        self.ui.button_SQL_view_data.clicked.connect(self.print_data)
        self.model = None
        self.ui.button_SQL_view_data.clicked.connect(self.sql_tableview_model)
        self.ui.button_SQL_add.clicked.connect(self.sql_add_row)
        self.ui.button_SQL_delete.clicked.connect(self.sql_delete_row)

        self.ui.button_start_server.clicked.connect(self.start_server)
        
        self.ui.button_client_1.clicked.connect(self.connect_to_server_1)   
        self.ui.lineEdit_client_1.returnPressed.connect(self.send_data_1)    
        self.ui.button_client_2.clicked.connect(self.connect_to_server_2)   
        self.ui.lineEdit_client_2.returnPressed.connect(self.send_data_2)             
        

        open_gl = PyQtOpenGL(parent=self.ui.frame_gl)   
        open_gl.setMinimumSize(300, 300)                
        open_gl.paint_0 = False
        open_gl.paint_1 = False
        open_gl.paint_2 = False
        open_gl.resize_lines = False 
        open_gl.paint_rotation = False

        self.ui.comboBox.hide()
        self.drop_combo = DragDropCombo(self.MainWindow)
        self.drop_combo.setMinimumSize(QtCore.QSize(141, 0))
        self.ui.horizontalLayout_2.addWidget(self.drop_combo)
        
        self.ui.pushButton.hide()

        self.drop_button = DragDropButton('DropButton', self.MainWindow)
        self.drop_button.setMinimumSize(QtCore.QSize(161, 0))
        self.ui.horizontalLayout_2.addWidget(self.drop_button)

        self.update_tree()
        self.update_calendar()
        self.update_progressbar()
        
    def update_tree(self): 
        self.ui.treeWidget.headerItem().setText(1, 'Header 2')
        self.ui.treeWidget.topLevelItem(0).setText(1, "Item 2")
        self.ui.treeWidget.topLevelItem(0).addChild(QtWidgets.QTreeWidgetItem())
        self.ui.treeWidget.topLevelItem(0).child(0).setText(1, "Subitem 2")
        
    def print_tree(self):
        header0 = self.ui.treeWidget.headerItem().text(0)
        header1 = self.ui.treeWidget.headerItem().text(1)
        print(header0 + '\n' + header1 + '\n')
        
    def update_calendar(self):
        self.ui.calendarWidget.selectionChanged.connect(self.update_date)

    def update_date(self):
        self.ui.dateEdit.setDate(self.ui.calendarWidget.selectedDate())      
    def update_progressbar(self):
        self.ui.radioButton_start.clicked.connect(self.start_progressbar)
        self.ui.radioButton_stop.clicked.connect(self.stop_progressbar)
        self.ui.radioButton_reset.clicked.connect(self.reset_progressbar)
        self.progress_value = 0
        self.stop_progress = False

    def progressbar_counter(self, start_value=0):
        self.run_thread = RunThread(parent=None, counter_start=start_value)
        self.run_thread.start()
        self.run_thread.counter_value.connect(self.set_progressbar)
                
    def set_progressbar(self, counter):
        if not self.stop_progress:
            self.ui.progressBar.setValue(counter)        
                   
    def start_progressbar(self):
        self.stop_progress = False
        self.progress_value = self.ui.progressBar.value()        
        self.progressbar_counter(self.progress_value)
           
    def stop_progressbar(self):
        self.stop_progress = True
        try: self.run_thread.stop()
        except: pass
           
    def reset_progressbar(self):
        self.stop_progressbar()
        self.progress_value = 0
        self.stop_progress = False
        self.ui.progressBar.reset()
        

class RunThread(QtCore.QThread):   
    counter_value = QtCore.pyqtSignal(int)            # define new Signal    
    def __init__(self, parent=None, counter_start=0):
        super(RunThread, self).__init__(parent)
        self.counter = counter_start
        self.is_running = True
        
    def run(self):
        while self.counter < 100 and self.is_running == True:
            sleep(0.1)
            self.counter += 1
            print(self.counter)
            self.counter_value.emit(self.counter)     # emit new Signal with value
            
    def stop(self):
        self.is_running = False
        print('stopping thread...')
        self.terminate()


class DragDropButton(QtWidgets.QPushButton):
    
    def __init__(self, text, parent):
        super().__init__(text, parent)       
        self.setAcceptDrops(True)
        
    def dragEnterEvent(self, event):
        if event.mimeData().hasFormat('text/plain'):
            event.accept()
        else:
            event.ignore()
            
    def dropEvent(self, event):
        self.setText(event.mimeData().text())
    

class DragDropCombo(QtWidgets.QComboBox):    

    def __init__(self, parent):
        super().__init__(parent)        
        self.setAcceptDrops(True)
                            
    def dragEnterEvent(self, event):
        if event.mimeData().hasFormat('text/plain'):
            event.accept()
        else:
            event.ignore()                            

    def dropEvent(self, event):
        self.addItem(event.mimeData().text())
        
         
        
if __name__ == "__main__":
    MainWindow_EXEC()