PyQt學(xué)習(xí)筆記(6)——Actions?and?Key?Sequences_蕭蕭_新浪博客
??? PyQt學(xué)習(xí)筆記(6)——Actions and Key Sequences
??? (2010-02-20 09:40:24)
??? 轉(zhuǎn)載▼
??? 標(biāo)簽:
??? python
??? pyqt4
??? it
??? ??? 分類: Python
??? 在Qt中,目前我認(rèn)為做的最好的兩種機(jī)制就是:SIGNAL and SLOTS和Actions and Key Sequences。
??? Actions and Key Sequence我對(duì)他的理解就是各種動(dòng)作帶來(lái)的核心一致反應(yīng)。舉個(gè)例子:
??? 比如我們?cè)趹?yīng)用程序中常見(jiàn)的“新建文件”這一功能,他的實(shí)現(xiàn)可以通過(guò)下面幾種方式:
??? 1 點(diǎn)擊菜單:File->New菜單項(xiàng)
??? 2 點(diǎn)擊工具欄:new的圖標(biāo)
??? 3 鍵盤(pán)快捷方式:如Ctrl+N
??? 上面的這三種actions,其實(shí)帶來(lái)的結(jié)果(Sequence)是一樣的,就是新建文件,那么在程序中如何做到三者的統(tǒng)一和同步,Qt給了很好的解決方法。在PyQt中,它把類似上面的actions封裝(encapsulates)到一個(gè)Qaction的class中,下面舉個(gè)例子:(windows環(huán)境下)
??? #!/usr/bin/env python
??? #coding=utf-8
????
??? import sys
??? from PyQt4.QtCore import *
??? from PyQt4.QtGui import *???????????????????
????
??? class MainWindow(QMainWindow):
??????? def __init__(self,parent=None):
??????????? super(MainWindow,self).__init__(parent)
????
??????????? fileNewAction=QAction(QIcon("./images/filenew.png"),"&New",self)
??????????? fileNewAction.setShortcut(QKeySequence.New)
??????????? helpText = "Create a new file"
??????????? fileNewAction.setToolTip(helpText)
??????????? fileNewAction.setStatusTip(helpText)
??????????? self.connect(fileNewAction,SIGNAL("triggered()"),self.fileNew)
????
??????????? self.fileMenu = self.menuBar().addMenu("&File")
??????????? self.fileMenu.addAction(fileNewAction)
????
??????????? filetoolbar = self.addToolBar("File")
??????????? filetoolbar.addAction(fileNewAction)
???????????????
??????????? self.status = self.statusBar()
??????????? self.status.showMessage("This is StatusBar",5000)
??????????? self.setWindowTitle("PyQt MianWindow")
?????????
??????? def fileNew(self):
??????????? self.status.showMessage("You have created a new file!",9000)
??? def main():
??????? app = QApplication(sys.argv)
??????? app.setApplicationName("PyQt MianWindow")
??????? app.setWindowIcon(QIcon("./images/icon.png"))
??????? form = MainWindow()
??????? form.show()
??????? app.exec_()
????
??? main()
??? 上面程序的目的就是:要讓點(diǎn)擊菜單new,Ctrl+N,點(diǎn)擊工具欄new按鈕三種action都執(zhí)行一個(gè)命令fileNew()。
??? 其中紅色部分就是Qaction部分,其中的QKeySequence.New 就是基本多平臺(tái)都統(tǒng)一使用的新建的響應(yīng)快捷鍵Ctrl+N,如果我們需要的快捷鍵沒(méi)有,那么我們可以自己設(shè)置,就是填寫(xiě)快捷鍵的名稱比如:fileNewAction.setShortcut(“Ctrl+N”)。把這個(gè)action都給了菜單new和工具欄,通過(guò)connect綁定,他們都執(zhí)行同一響應(yīng)。
??? 從上面可以看到,每次創(chuàng)建一個(gè)QAction都需要五六行,如果在一個(gè)應(yīng)用程序中都這么創(chuàng)建會(huì)很費(fèi)時(shí)間的,所以我們可以寫(xiě)一個(gè)函數(shù)來(lái)封裝這一功能:
???????? def createAction(self,text,slot=None,shortcut=None, icon=None,
?????????????????? tip=None,checkable=False,signal="triggered()"):
??????????? action = QAction(text, self)
??????????? if icon is not None:
??????????????? action.setIcon(QIcon("./images/%s.png" % icon))
??????????? if shortcut is not None:
??????????????? action.setShortcut(shortcut)
??????????? if tip is not None:
??????????????? action.setToolTip(tip)
??????????????? action.setStatusTip(tip)
??????????? if slot is not None:
??????????????? self.connect(action, SIGNAL(signal), slot)
??????????? if checkable:
??????????????? action.setCheckable(True)
??????????? return action
??? 有了這個(gè)函數(shù)以后,我們可以定義上面的fileNewAction了:
??? fileNewAction = self.createAction("&New...", self.fileNew,
??????????????????? QKeySequence.New, "filenew", "Create an image file")
??? 一句話搞定。QKeySequence.New也可以用”Ctrl+n”代替
????
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
