PyQt多窗口調用


經常有人問到如何在一個主窗口中打開一個對話框,然后在確認對話框之后,開啟另一個窗口進行后續操作,
要求主窗口和最終的窗口之間都能響應用戶操作,也就是非模態窗口。隨手寫了幾行代碼,簡要示意。

:::python
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Gui (imgui@qq.com)
# License: BSD

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys


class W1(QWidget):
    def __init__(self, parent=None):
        super(W1, self).__init__(parent)
        self.btn = QPushButton('Click1')

        vb = QVBoxLayout()
        vb.addWidget(self.btn)
        self.setLayout(vb)

        self.btn.clicked.connect(self.fireupWindows2)

    def fireupWindows2(self):
        w2 = W2()
        if w2.exec_():
            self.w3 = W3()    # 需要通過self實例化為全局變量,不加self的話,一運行就被回收,也就無法顯示。
            self.w3.show()


class W2(QDialog):
    def __init__(self, parent=None):
        super(W2, self).__init__(parent)

        self.btn = QPushButton('Click2')

        vb = QVBoxLayout()
        vb.addWidget(self.btn)
        self.setLayout(vb)

        self.btn.clicked.connect(self.fireupWindows3)

    def fireupWindows3(self):
        self.accept()


class W3(QWidget):
    def __init__(self, parent=None):
        super(W3, self).__init__(parent)
        self.resize(300, 300)
        self.btn = QLabel('The Last Window')

        vb = QVBoxLayout()
        vb.addWidget(self.btn)
        self.setLayout(vb)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = W1()
    w.show()
    sys.exit(app.exec_())






oneMainWindow.py
# -*- coding:utf-8 -*-

from PyQt4.QtGui import (QMainWindow, QPushButton, QApplication, 
                                     QVBoxLayout, QWidget)
from PyQt4.QtCore import (Qt, QObject, SIGNAL)
import anotherWindow
import sys

class OneWindow(QMainWindow):
    def __init__(self):
        super(OneWindow, self).__init__()
        self.setGeometry(100, 100, 600, 400)
        vLayout = QVBoxLayout()
        self.button = QPushButton("OK")
        vLayout.addWidget(self.button)
        widget = QWidget()
        widget.setLayout(vLayout)
        self.setCentralWidget(widget)
        
        QObject.connect(self.button,SIGNAL("clicked()") , self.anotherWindow)
        
    def anotherWindow(self):
        print 'OK'
        self.another = anotherWindow.AnotherWindow()
        self.another.show()              #難道不是用這個show()函數嗎?
    
if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = OneWindow()
    w.show()     
    app.exec_()

anotherWindow.py
# -*- coding:utf-8 -*-

from PyQt4.QtGui import (QMainWindow)

class AnotherWindow(QMainWindow):
    def __init__(self):
        super(AnotherWindow, self).__init__()
        self.resize(400, 300)
        self.setWindowTitle("this is another window")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM