C7:Network and Managing Large Documents
Create Small Browser
Final Result
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
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
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
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
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
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_())