• 技术文章 >后端开发 >Python教程

    PyQT实现多窗口切换

    不言不言2018-04-20 14:04:32原创4171
    这篇文章主要为大家详细介绍了PyQT实现多窗口切换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    最近做个软件,用PyQT写的,在实现菜单栏点击弹出新窗口的时候严重被卡壳,发现用WxPython的思想和方式来做完全无法实现。PyQT的中文资料实在是太少了。看了点英文资料和QT的资料,逆推PyQT的实现方法,总算搞定。下面是一个小demo。

    主界面的代码如下所示:



    # -*- coding: utf-8 -*- 
     
    from PyQt4 import QtCore, QtGui 
    from dialog1 import Dialog1 
    from dialog2 import Dialog2 
    import sys 
     
    try: 
      _fromUtf8 = QtCore.QString.fromUtf8 
    except AttributeError: 
      def _fromUtf8(s): 
        return s 
     
    try: 
      _encoding = QtGui.QApplication.UnicodeUTF8 
      def _translate(context, text, disambig): 
        return QtGui.QApplication.translate(context, text, disambig, _encoding) 
    except AttributeError: 
      def _translate(context, text, disambig): 
        return QtGui.QApplication.translate(context, text, disambig) 
       
    class MainWindow(QtGui.QWidget):  
       
      dialog1_signal = QtCore.pyqtSignal()     #定义一个无参数的信号,串口设定与子站初始化信号 
      dialog2_signal = QtCore.pyqtSignal()     #定义一个无参数的信号,串口设定与子站初始化信号 
      exit_signal = QtCore.pyqtSignal()     #定义一个无参数的信号,串口设定与子站初始化信号 
       
      def __init__(self): 
        super(MainWindow,self).__init__() 
         
      def setupUi(self, Form): 
        Form.setObjectName(_fromUtf8("Form")) 
        Form.resize(400, 300) 
        self.form = Form 
        self.pushButton = QtGui.QPushButton(Form) 
        self.pushButton.setGeometry(QtCore.QRect(70, 90, 75, 23)) 
        self.pushButton.setObjectName(_fromUtf8("pushButton")) 
        self.pushButton_2 = QtGui.QPushButton(Form) 
        self.pushButton_2.setGeometry(QtCore.QRect(240, 90, 75, 23)) 
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) 
        self.pushButton_3 = QtGui.QPushButton(Form) 
        self.pushButton_3.setGeometry(QtCore.QRect(150, 160, 75, 23)) 
        self.pushButton_3.setObjectName(_fromUtf8("pushButton_3")) 
        self.label = QtGui.QLabel(Form) 
        self.label.setGeometry(QtCore.QRect(170, 40, 54, 16)) 
        self.label.setObjectName(_fromUtf8("label")) 
     
        self.retranslateUi(Form) 
        QtCore.QMetaObject.connectSlotsByName(Form) 
     
        #信号连接到指定槽 
        self.pushButton.clicked.connect(self.on_pushButton_clicked) 
        self.pushButton_2.clicked.connect(self.on_pushButton_2_clicked) 
        self.pushButton_3.clicked.connect(self.on_pushButton_3_clicked) 
         
         
      def retranslateUi(self, Form): 
        Form.setWindowTitle(_translate("Form", "Form", None)) 
        self.pushButton.setText(_translate("Form", "进入dialog1", None)) 
        self.pushButton_2.setText(_translate("Form", "进入dialog2", None)) 
        self.pushButton_3.setText(_translate("Form", "退出", None)) 
        self.label.setText(_translate("Form", "主窗体", None)) 
         
      def on_pushButton_clicked(self): 
        self.form.hide() 
        Form1 = QtGui.QDialog() 
        ui = Dialog1() 
        ui.setupUi(Form1) 
        Form1.show() 
        Form1.exec_() 
        self.form.show() 
     
      def on_pushButton_3_clicked(self, Form): 
        #QtCore.QObject.connect( self.pushButton_3, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT(quit())) 
        #也可以这样 
        self.form.close() 
         
      def on_pushButton_2_clicked(self): 
        self.form.close() 
        Form1 = QtGui.QDialog() 
        ui = Dialog2() 
        ui.setupUi(Form1) 
        Form1.show() 
        Form1.exec_() 
        self.form.show() 
     
    if __name__ == '__main__': 
      app = QtGui.QApplication(sys.argv) 
      Form = QtGui.QWidget() 
      window = MainWindow()  
      window.setupUi(Form) 
      Form.show()   
      sys.exit(app.exec_())  
       
      pass


    Dialog1界面的代码如下:


    # -*- coding: utf-8 -*- 
     
    from PyQt4 import QtCore, QtGui 
     
     
    try: 
      _fromUtf8 = QtCore.QString.fromUtf8 
    except AttributeError: 
      def _fromUtf8(s): 
        return s 
     
    try: 
      _encoding = QtGui.QApplication.UnicodeUTF8 
      def _translate(context, text, disambig): 
        return QtGui.QApplication.translate(context, text, disambig, _encoding) 
    except AttributeError: 
      def _translate(context, text, disambig): 
        return QtGui.QApplication.translate(context, text, disambig) 
      
    class Dialog1(QtGui.QWidget): 
      def setupUi(self, Dialog): 
        Dialog.setObjectName(_fromUtf8("Dialog")) 
        Dialog.resize(400, 300) 
        self.form = Dialog 
        self.label = QtGui.QLabel(Dialog) 
        self.label.setGeometry(QtCore.QRect(180, 50, 54, 12)) 
        self.label.setObjectName(_fromUtf8("label")) 
        self.dialog1_pushButton = QtGui.QPushButton(Dialog) 
        self.dialog1_pushButton.setGeometry(QtCore.QRect(160, 130, 75, 23)) 
        self.dialog1_pushButton.setObjectName(_fromUtf8("pushButton")) 
     
        self.retranslateUi(Dialog) 
        QtCore.QMetaObject.connectSlotsByName(Dialog) 
     
        #信号连接到指定槽 
        self.dialog1_pushButton.clicked.connect(self.on_dialog1_pushButton_clicked) 
         
      def retranslateUi(self, Dialog): 
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) 
        self.label.setText(_translate("Dialog", "dialog1", None)) 
        self.dialog1_pushButton.setText(_translate("Dialog", "返回主窗体", None)) 
     
      def on_dialog1_pushButton_clicked(self): 
        self.form.close() 
     
    if __name__ == "__main__": 
      import sys 
      app = QtGui.QApplication(sys.argv) 
      Dialog = QtGui.QDialog() 
      ui = Dialog1() 
      ui.setupUi(Dialog) 
      Dialog.show() 
      sys.exit(app.exec_()) 
       
    
    Dialog2界面的代码如下:
    [python] view plain copy
    # -*- coding: utf-8 -*- 
     
    from PyQt4 import QtCore, QtGui 
     
     
    try: 
      _fromUtf8 = QtCore.QString.fromUtf8 
    except AttributeError: 
      def _fromUtf8(s): 
        return s 
     
    try: 
      _encoding = QtGui.QApplication.UnicodeUTF8 
      def _translate(context, text, disambig): 
        return QtGui.QApplication.translate(context, text, disambig, _encoding) 
    except AttributeError: 
      def _translate(context, text, disambig): 
        return QtGui.QApplication.translate(context, text, disambig) 
      
    class Dialog2(object): 
      def setupUi(self, Dialog): 
        Dialog.setObjectName(_fromUtf8("Dialog")) 
        Dialog.resize(400, 300) 
        self.form = Dialog 
        self.label = QtGui.QLabel(Dialog) 
        self.label.setGeometry(QtCore.QRect(180, 60, 54, 12)) 
        self.label.setObjectName(_fromUtf8("label")) 
        self.pushButton = QtGui.QPushButton(Dialog) 
        self.pushButton.setGeometry(QtCore.QRect(160, 140, 75, 23)) 
        self.pushButton.setObjectName(_fromUtf8("pushButton")) 
     
        self.retranslateUi(Dialog) 
        QtCore.QMetaObject.connectSlotsByName(Dialog) 
         
        #信号连接到指定槽 
        self.pushButton.clicked.connect(self.on_pushButton_clicked) 
         
      def retranslateUi(self, Dialog): 
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) 
        self.label.setText(_translate("Dialog", "dialog2", None)) 
        self.pushButton.setText(_translate("Dialog", "返回主窗体", None)) 
         
      def on_pushButton_clicked(self): 
        self.form .close() 
     
    if __name__ == "__main__": 
      import sys 
      app = QtGui.QApplication(sys.argv) 
      Dialog = QtGui.QDialog() 
      ui = Dialog2() 
      ui.setupUi(Dialog) 
      Dialog.show() 
      sys.exit(app.exec_())


    按钮绑定到新弹出界面的处理函数,使用的槽连接方式为:



    self.pushButton.clicked.connect(self.on_pushButton_clicked)


    如果是Menu项绑定到新弹出界面的处理函数,则应使用的槽连接方式为:


    QtCore.QObject.connect(self.set_value_menu, QtCore.SIGNAL(_fromUtf8("triggered()")), self.open_set_value_form)


    二者使用的槽处理函数基本一致。
    若不显示原界面,只需将原界面hide()即可,如:


    self.form.hide()


    若需在弹出新窗口时同时原窗口保持可见,则不需这一步。且在这种情况下,若要原窗口可选为顶层窗体,则在显示新窗口时应使用show():


    Form1.show()


    若新窗口为固定的顶层窗体,原窗体被遮盖,则应使用exec_():


    Form1.exec_()


    相关推荐:

    PyQt实现界面翻转切换效果


    以上就是PyQT实现多窗口切换的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PyQT 切换 实现
    上一篇:pandas groupby 分组取每组的前几行记录方法 下一篇:基于pandas数据样本行列选取的方法
    PHP编程就业班

    相关文章推荐

    • Python使用丝般顺滑的经典技巧总结• 简单介绍一下Python(图文详解)• 详细解析Python之关键字• 一起聊聊Python的编码样式• 深入了解Python数据处理及可视化

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网