pyQt 常式學習 -1-

來源:互聯網
上載者:User

試用了一段時間wxpython,想嘗試一下pyQt,看看兩者到底那個更好使些。網上贊pyQt的不少,應該也不是空穴來風,我看了幾個pyQt的demo,的確很強大,雖然wxpython也不賴。更主要的原因是wxwidgets沿用MFC那套訊息機制在python下看來有些繁瑣,想試試Qt的signal-slot方式。

一、MDI - pyQt demo

1. 主視窗繼承自QtGui.QMainWindow

2. 初始化過程 __init__(self):

2.1  代碼

        super(MainWindow, self).__init__()        self.mdiArea = QtGui.QMdiArea()        self.mdiArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)        self.mdiArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)        self.setCentralWidget(self.mdiArea)
中間兩個長行代碼顯然是設定滑動軌何時出現的。另外也看到了Qt MDI的構建模型, 先建立一個MDI地區,再設定主視窗的中心組件為它。

2.2 代碼

        self.mdiArea.subWindowActivated.connect(self.updateMenus)        self.windowMapper = QtCore.QSignalMapper(self)        self.windowMapper.mapped[QtGui.QWidget].connect(self.setActiveSubWindow)
第一行:當子視窗被啟用後觸發updateMenus操作。

第二行:建立訊號映射器

第三行:綁定訊號映射到setActiveSubWindow函數,傳入該函數的參數為QtGui.QWidget類型。

附加說明:

            action.triggered.connect(self.windowMapper.map)            self.windowMapper.setMapping(action, window)

其中action為一個功能表項目,window為子視窗對象。當點擊一個功能表項目觸發操作時,會將觸發者自身作為一個Key值,到windowMapper.map中尋找Value值,這個Value就是視窗對象window,(是setMapping(action, window)將兩者綁定成一個字典),再將window值傳入由映射器綁定的統一處理函數setActiveSubWindow。

3. 添加子視窗

        child = MdiChild()        self.mdiArea.addSubWindow(child)


4. 獲得子視窗列表

windows = self.mdiArea.subWindowList()

5. 添加功能表項目

        self.fileMenu = self.menuBar().addMenu("&File")        self.fileMenu.addAction(self.newAct)        self.fileMenu.addAction(self.openAct)        self.fileMenu.addAction(self.saveAct)        self.fileMenu.addAction(self.saveAsAct)        self.fileMenu.addSeparator()
菜單子項為:

        self.newAct = QtGui.QAction(QtGui.QIcon(':/images/new.png'), "&New",                self, shortcut=QtGui.QKeySequence.New,                statusTip="Create a new file", triggered=self.newFile)




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.