zoukankan      html  css  js  c++  java
  • No.4 PyQt学习(页面跳转)

    先定义了两个MainWindow进行跳转,但发现这样的话,从第二个Window无法跳转会第一个。代码如下:

    # -*- coding: utf-8 -*-
    import sys
    
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    import MainPage
    
    class Home(QMainWindow):
    
        def __init__(self):
            super(Home, self).__init__()
            #QtGui.QWidget.__init__(self)
            self.style = """ 
                            QPushButton{background-color:grey;color:white;} 
                            #window{ background-image: url(background1.jpg); }
                        """
            self.setStyleSheet(self.style)
            self.initUI()
    
        def initUI(self):
    
            self.resize(650, 480)
            self.statusBar().showMessage('Ready')
            self.setObjectName("window")
            self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
            self.center()
    
            widget = QWidget()
            label = QLabel()
            label.setText("<font size=%s><B>%s</B></font>" %("15", "Face Recognition System"))
            start = QPushButton("Start", self)
            widget.setStatusTip('  ')
            #start.resize(50, 25)
            quit = QPushButton("Quit", self)
            #quit.resize(50,25)
            start.clicked.connect(self.startClicked)
            quit.clicked.connect(self.quitClicked)
    
            vbox1 = QVBoxLayout()  # 垂直布局
            vbox2 = QVBoxLayout()
            vbox3 = QVBoxLayout()
            vbox4 = QVBoxLayout()
    
            #两边空隙填充
            label1 = QLabel()
            label1.resize(50,50)
            label2 = QLabel()
            label2.resize(50, 50)
            vbox1.addWidget(label1)
            #vbox2.addWidget(label)
            vbox4.addWidget(start)
            vbox4.addWidget(quit)
            vbox3.addWidget(label2)
            # 按钮两边空隙填充
            label3 = QLabel()
            label3.resize(50, 50)
            label4 = QLabel()
            label4.resize(50, 50)
            hbox1 = QHBoxLayout()
            hbox1.addWidget(label3)
            hbox1.addLayout(vbox4)
            hbox1.addWidget(label4)
            #标题与两个按钮上下协调
            label5 = QLabel()
            label5.resize(1, 1)
            label6 = QLabel()
            label6.resize(1, 1)
            label7 = QLabel()
            label7.resize(1, 1)
            vbox2.addWidget(label5)
            vbox2.addWidget(label)
            vbox2.addWidget(label6)
            vbox2.addLayout(hbox1)
            vbox2.addWidget(label7)
    
            hbox = QHBoxLayout()
            hbox.addLayout(vbox1)
            hbox.addLayout(vbox2)
            hbox.addLayout(vbox3)
            widget.setLayout(hbox)
    
            self.setCentralWidget(widget)
    
        def mousePressEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
                QApplication.postEvent(self, QEvent(174))
                event.accept()
    
        def mouseMoveEvent(self, event):
            if event.buttons() == Qt.LeftButton:
                self.move(event.globalPos() - self.dragPosition)
                event.accept()
    
        def quitClicked(self):
            reply = QMessageBox.question(self, 'Warning',
                                               'Are you sure to quit?', QMessageBox.Yes,
                                               QMessageBox.No)
            if reply == QMessageBox.Yes:
                quit()
    
        def startClicked(self):
            self.hide()
            self.ui = MainPage.MainPage()                #必须将另一个界面改为成员变量,负责MainPage会与函数调用周期一样一闪而过
            self.ui.show()
    
        def center(self):
            qr = self.frameGeometry()  # 得到该主窗口的矩形框架qr
            cp = QDesktopWidget().availableGeometry().center()  # 屏幕中间点的坐标cp
            qr.moveCenter(cp)  # 将矩形框架移至屏幕正中央
            self.move(qr.topLeft())  # 应用窗口移至矩形框架的左上角点
    
    
    def main():
        app = QApplication(sys.argv)
        main = Home()
        main.show()
        sys.exit(app.exec_())
    
    
    if __name__ == '__main__':
        main()

    第二个窗口代码为:

    # -*- coding: utf-8 -*-
    import sys
    
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    try:
        _fromUtf8 = QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
    
    try:
        _encoding = QApplication.UnicodeUTF8
    
        def _translate(context, text, disambig):
            return QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QApplication.translate(context, text, disambig)
    
    
    class MainPage(QMainWindow):
        def __init__(self):
            super(MainPage, self).__init__()
            self.style = """ 
                                    QPushButton{background-color:grey;color:white;} 
                                    #window{ background-image: url(background1.jpg); }
                                """
            self.setStyleSheet(self.style)
            self.initUI()
    
        def initUI(self):
            self.resize(650, 480)
            self.setObjectName("window")
            self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
            self.center()
            back = QPushButton("Back", self)
            back.setGeometry(190, 210,50, 25)
            back.clicked.connect(self.backClicked)
    
        def backClicked(self):
            self.close()
    
        def center(self):
            qr = self.frameGeometry()  # 得到该主窗口的矩形框架qr
            cp = QDesktopWidget().availableGeometry().center()  # 屏幕中间点的坐标cp
            qr.moveCenter(cp)  # 将矩形框架移至屏幕正中央
            self.move(qr.topLeft())  # 应用窗口移至矩形框架的左上角点
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        ui = MainPage()
        ui.show()
        sys.exit(app.exec_())

    截图如下:

        

    点击start至第二个界面,点击back无法返回第一个页面。

     修改代码,可以实现两个页面的互相跳转:

    Page1:

    # -*- coding: utf-8 -*-
    import sys
    
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    import MainPage
    
    class Home(QMainWindow):
    
        def __init__(self):
            super(Home, self).__init__()
            #QtGui.QWidget.__init__(self)
            self.style = """ 
                            QPushButton{background-color:grey;color:white;} 
                            #window{ background-image: url(background1.jpg); }
                        """
            self.setStyleSheet(self.style)
            self.initUI()
    
        def initUI(self):
    
            self.resize(650, 480)
            self.statusBar().showMessage('Ready')
            self.setObjectName("window")
            self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
            self.center()
    
            widget = QWidget()
            label = QLabel()
            label.setText("<font size=%s><B>%s</B></font>" %("15", "Face Recognition System"))
            start = QPushButton("Start", self)
            widget.setStatusTip('  ')
            #start.resize(50, 25)
            quit = QPushButton("Quit", self)
            #quit.resize(50,25)
            start.clicked.connect(self.startClicked)
            quit.clicked.connect(self.quitClicked)
    
            vbox1 = QVBoxLayout()  # 垂直布局
            vbox2 = QVBoxLayout()
            vbox3 = QVBoxLayout()
            vbox4 = QVBoxLayout()
    
            #两边空隙填充
            label1 = QLabel()
            label1.resize(50,50)
            label2 = QLabel()
            label2.resize(50, 50)
            vbox1.addWidget(label1)
            #vbox2.addWidget(label)
            vbox4.addWidget(start)
            vbox4.addWidget(quit)
            vbox3.addWidget(label2)
            # 按钮两边空隙填充
            label3 = QLabel()
            label3.resize(50, 50)
            label4 = QLabel()
            label4.resize(50, 50)
            hbox1 = QHBoxLayout()
            hbox1.addWidget(label3)
            hbox1.addLayout(vbox4)
            hbox1.addWidget(label4)
            #标题与两个按钮上下协调
            label5 = QLabel()
            label5.resize(1, 1)
            label6 = QLabel()
            label6.resize(1, 1)
            label7 = QLabel()
            label7.resize(1, 1)
            vbox2.addWidget(label5)
            vbox2.addWidget(label)
            vbox2.addWidget(label6)
            vbox2.addLayout(hbox1)
            vbox2.addWidget(label7)
    
            hbox = QHBoxLayout()
            hbox.addLayout(vbox1)
            hbox.addLayout(vbox2)
            hbox.addLayout(vbox3)
            widget.setLayout(hbox)
    
            self.setCentralWidget(widget)
    
        def mousePressEvent(self, event):
            if event.button() == Qt.LeftButton:
                self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
                QApplication.postEvent(self, QEvent(174))
                event.accept()
    
        def mouseMoveEvent(self, event):
            if event.buttons() == Qt.LeftButton:
                self.move(event.globalPos() - self.dragPosition)
                event.accept()
    
        def quitClicked(self):
            reply = QMessageBox.question(self, 'Warning',
                                               'Are you sure to quit?', QMessageBox.Yes,
                                               QMessageBox.No)
            if reply == QMessageBox.Yes:
                quit()
    
        def startClicked(self):
            self.hide()
            Form = QDialog()
            ui = MainPage.MainPage(Form)
            Form.show()
            Form.exec_()
            self.show()
    
        def center(self):
            qr = self.frameGeometry()  # 得到该主窗口的矩形框架qr
            cp = QDesktopWidget().availableGeometry().center()  # 屏幕中间点的坐标cp
            qr.moveCenter(cp)  # 将矩形框架移至屏幕正中央
            self.move(qr.topLeft())  # 应用窗口移至矩形框架的左上角点
    
    
    def main():
        app = QApplication(sys.argv)
        main = Home()
        main.show()
        sys.exit(app.exec_())
    
    
    if __name__ == '__main__':
        main()

    Page2:

    # -*- coding: utf-8 -*-
    import sys
    
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    try:
        _fromUtf8 = QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
    
    try:
        _encoding = QApplication.UnicodeUTF8
    
    
        def _translate(context, text, disambig):
            return QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QApplication.translate(context, text, disambig)
    
    
    class MainPage(QMainWindow):
        def __init__(self, Dialog):
            super(MainPage, self).__init__()
            self.initUI(Dialog)
    
        def initUI(self, Dialog):
            Dialog.resize(650, 480)
            self.form = Dialog
            self.form.setObjectName("window")
            self.form.setStyleSheet ("background-image: url(background1.jpg)");
            self.form.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
    
            back = QPushButton("Back", Dialog)
            back.setGeometry(190, 210, 50, 25)
            back.clicked.connect(self.backClicked)
    
        def backClicked(self):
            self.form.close()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        Dialog = QDialog()
        ui = MainPage(Dialog)
        ui.show()
        sys.exit(app.exec_())

    参考:http://blog.csdn.net/sollor525/article/details/40076395

  • 相关阅读:
    CPU被挖矿,Redis竟是内鬼!
    图解四种 IO 模型
    用户态和内核态的区别是啥
    关于 RocketMQ ClientID 相同引发的消息堆积的问题
    玩转 ByteBuffer
    RocketMQ Consumer 启动时都干了些啥?
    网络协议之:基于UDP的高速数据传输协议UDT
    dart系列之:安全看我,dart中的安全特性null safety
    JetBrains又出神器啦!Fleet,体验飞一般的感觉
    网络协议之:还在用HTTP代理?弱爆了!快试试SOCKS5
  • 原文地址:https://www.cnblogs.com/farewell-farewell/p/7687115.html
Copyright © 2011-2022 走看看