C7:Network and Managing Large Documents

Create Small Browser

Final Result

C7:Network and Managing Large Documents

How to do it?

class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.dispSite)
        self.show()
    def dispSite(self):
        self.ui.widget.load(QUrl(self.ui.lineEdit.text()))
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

Create Server-side Application

Final Result

C7:Network and Managing Large Documents

How to do it?

Client

tcpClientA = None
class Window(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.textEditMessages = self.ui.textEdit
        self.ui.pushButton.clicked.connect(self.dispMessage)
        self.show()
    def dispMessage(self):
        text = self.ui.lineEdit.text()
        self.ui.textEdit.append("Client: "+self.ui.lineEdit.text())
        tcpClientA.send(text.encode())
        self.ui.lineEdit.setText("")
class ClientThread(Thread):
    def __init__(self,window):
        Thread.__init__(self)
        self.window = window
    def run(self):
        host = socket.gethostname()
        port = 80
        BUFFER_SIZE = 1024
        global tcpClientA
        tcpClientA = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        tcpClientA.connect((host,port))
        while True:
            data = tcpClientA.recv(BUFFER_SIZE)
            window.textEditMessages.append("Server: "+data.decode("utf-8"))
        tcpClientA.close()
if __name__=="__main__":
    app = QApplication(sys.argv)
    window = Window()
    clientThread = ClientThread(window)
    clientThread.start()
    window.exec()
    sys.exit(app.exec_())

Server

conn = None
class Window(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.textEdit = self.ui.textEdit
        self.ui.pushButton.clicked.connect(self.dispMessage)
        self.show()
    def dispMessage(self):
        text = self.ui.lineEdit.text()
        global conn
        conn.send(text.encode("utf-8"))
        self.ui.textEdit.append("Server: "+self.ui.lineEdit.text())
        self.ui.lineEdit.setText("")
class ServerThread(Thread):
    def __init__(self,window):
        Thread.__init__(self)
        self.window = window
    def run(self):
        TCP_IP = '0.0.0.0'
        TCP_PORT = 80
        BUFFER_SIZE = 1024
        tcpServer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        tcpServer.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        tcpServer.bind((TCP_IP,TCP_PORT))
        threads = []
        tcpServer.listen(4)
        while True:
            global conn
            (conn,(ip,port)) = tcpServer.accept()
            newthread = ClientThread(ip, port, window)
            newthread.start()
            threads.append(newthread)
        for t in threads:
            t.join()
class ClientThread(Thread):
    def __init__(self,ip,port,window):
        Thread.__init__(self)
        self.window = window
        self.ip = ip
        self.port = port
    def run(self):
        while True:
            global conn
            data = conn.recv(1024)
            window.textEdit.append("Client: "+data.decode("utf-8"))
if __name__=="__main__":
    app = QApplication(sys.argv)
    window = Window()
    serverThread = ServerThread(window)
    serverThread.start()
    window.exec()
    sys.exit(app.exec_())

Create Dockable and Floatable Sign-in Form

Final Result

C7:Network and Managing Large Documents

How to do it?

class AppWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = AppWindow()
    w.show()
    sys.exit(app.exec_())

Multiple Document Interface

Final Result

C7:Network and Managing Large Documents

How to do it?

class MyForm(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.mdiArea.addSubWindow(self.ui.subwindow)
        self.ui.mdiArea.addSubWindow(self.ui.subwindow_2)
        self.ui.actionSubWindow_View.triggered.connect(self.SubWindow_View)
        self.ui.actionTabbleWindow_View.triggered.connect(self.Tabbed_View)
        self.ui.actionCaseced_View.triggered.connect(self.cascadeArrange)
        self.ui.actionTile_View.triggered.connect(self.tileArrange)
        self.show()
    def SubWindow_View(self):
        self.ui.mdiArea.setViewMode(0)
    def Tabbed_View(self):
        self.ui.mdiArea.setViewMode(1)
    def cascadeArrange(self):
        self.ui.mdiArea.cascadeSubWindows()
    def tileArrange(self):
        self.ui.mdiArea.tileSubWindows()
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

Display Information in Tab Widget

Final Result

C7:Network and Managing Large Documents

How to do it?

class MyForm(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.show()
if __name__=="__main__":
    app = QApplication(sys.argv)
    w = MyForm()
    w.show()
    sys.exit(app.exec_())

Create Custom Menu Bar

Final Result

C7:Network and Managing Large Documents

How to do it?

class Appwindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.pos1 = [0,0]
        self.pos2 = [0,0]
        self.toDraw = ""
        self.ui.actionDraw_Circle.triggered.connect(self.drawCircle)
        self.ui.actionDraw_Rectangle.triggered.connect(self.drawRectangle)
        self.ui.actionDraw_Line.triggered.connect(self.drawLine)
        self.ui.actionPage_Setup.triggered.connect(self.pageSetup)
        self.ui.actionSet_Password.triggered.connect(self.setPassword)
        self.ui.actionCut.triggered.connect(self.cutMethod)
        self.ui.actionCopy.triggered.connect(self.copyMethod)
        self.ui.actionPaste.triggered.connect(self.pasteMethod)
    def paintEvent(self,event):
        qp = QPainter()
        qp.begin(self)
        if self.toDraw=="rectangle":
            width = self.pos2[0]-self.pos1[0]
            height = self.pos2[1]-self.pos1[1]
            qp.drawRect(self.pos1[0],self.pos1[1],width,height)
        if self.toDraw=="line":
            qp.drawLine(self.pos1[0],self.pos1[1],self.pos2[0],self.pos2[1])
        if self.toDraw=="circle":
            width = self.pos2[0]-self.pos1[0]
            height = self.pos2[1]-self.pos1[1]
            rect = QtCore.QRect(self.pos1[0],self.pos1[1],width,height)
            startAngle = 0
            arcLength = 360*16
            qp.drawArc(rect,startAngle,arcLength)
        qp.end()
    def mousePressEvent(self, event):
        if event.buttons() & QtCore.Qt.LeftButton:
            self.pos1[0],self.pos1[1] = event.pos().x(),event.pos().y()
            event.pos().y()
    def mouseReleaseEvent(self, event):
        self.pos2[0],self.pos2[1] = event.pos().x(),event.pos().y()
        event.pos().y()
        self.update()
    def drawCircle(self):
        self.ui.label.setText("")
        self.toDraw="circle"
    def drawRectangle(self):
        self.ui.label.setText("")
        self.toDraw="rectangle"
    def drawLine(self):
        self.ui.label.setText("")
        self.toDraw="line"
    def pageSetup(self):
        self.ui.label.setText("Page Setup Selected")
    def setPassword(self):
        self.ui.label.setText("Set Password Selected")
    def cutMethod(self):
        self.ui.label.setText("Cut menu Selected")
    def copyMethod(self):
        self.ui.label.setText("Copy menu Selected")
    def pasteMethod(self):
        self.ui.label.setText("Paste menu Selected")
app = QApplication(sys.argv)
w = Appwindow()
w.show()
sys.exit(app.exec_())