PyQt学习笔记(6)——Actions and Key Sequences
2013-09-22 16:01
435 查看
在Qt中,目前我认为做的最好的两种机制就是:SIGNAL
and SLOTS和Actions and Key Sequences。
Actions and Key Sequence我对他的理解就是各种动作带来的核心一致反应。举个例子:
比如我们在应用程序中常见的“新建文件”这一功能,他的实现可以通过下面几种方式:
1 点击菜单:File->New菜单项
2 点击工具栏:new的图标
3 键盘快捷方式:如Ctrl+N
上面的这三种actions,其实带来的结果(Sequence)是一样的,就是新建文件,那么在程序中如何做到三者的统一和同步,Qt给了很好的解决方法。在PyQt中,它把类似上面的actions封装(encapsulates)到一个Qaction的class中,下面举个例子:(windows环境下)
#!/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()
上面程序的目的就是:要让点击菜单new,Ctrl+N,点击工具栏new按钮三种action都执行一个命令fileNew()。
其中红色部分就是Qaction部分,其中的QKeySequence.New 就是基本多平台都统一使用的新建的响应快捷键Ctrl+N,如果我们需要的快捷键没有,那么我们可以自己设置,就是填写快捷键的名称比如:fileNewAction.setShortcut(“Ctrl+N”)。把这个action都给了菜单new和工具栏,通过connect绑定,他们都执行同一响应。
从上面可以看到,每次创建一个QAction都需要五六行,如果在一个应用程序中都这么创建会很费时间的,所以我们可以写一个函数来封装这一功能:
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
有了这个函数以后,我们可以定义上面的fileNewAction了:
fileNewAction = self.createAction("&New...", self.fileNew,
QKeySequence.New,
"filenew", "Create an image file")
一句话搞定。QKeySequence.New也可以用”Ctrl+n”代替
and SLOTS和Actions and Key Sequences。
Actions and Key Sequence我对他的理解就是各种动作带来的核心一致反应。举个例子:
比如我们在应用程序中常见的“新建文件”这一功能,他的实现可以通过下面几种方式:
1 点击菜单:File->New菜单项
2 点击工具栏:new的图标
3 键盘快捷方式:如Ctrl+N
上面的这三种actions,其实带来的结果(Sequence)是一样的,就是新建文件,那么在程序中如何做到三者的统一和同步,Qt给了很好的解决方法。在PyQt中,它把类似上面的actions封装(encapsulates)到一个Qaction的class中,下面举个例子:(windows环境下)
#!/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()
上面程序的目的就是:要让点击菜单new,Ctrl+N,点击工具栏new按钮三种action都执行一个命令fileNew()。
其中红色部分就是Qaction部分,其中的QKeySequence.New 就是基本多平台都统一使用的新建的响应快捷键Ctrl+N,如果我们需要的快捷键没有,那么我们可以自己设置,就是填写快捷键的名称比如:fileNewAction.setShortcut(“Ctrl+N”)。把这个action都给了菜单new和工具栏,通过connect绑定,他们都执行同一响应。
从上面可以看到,每次创建一个QAction都需要五六行,如果在一个应用程序中都这么创建会很费时间的,所以我们可以写一个函数来封装这一功能:
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
有了这个函数以后,我们可以定义上面的fileNewAction了:
fileNewAction = self.createAction("&New...", self.fileNew,
QKeySequence.New,
"filenew", "Create an image file")
一句话搞定。QKeySequence.New也可以用”Ctrl+n”代替
相关文章推荐
- PyQt学习笔记(6)——Actions and Key Sequences
- PyQt学习笔记(6)--Actions and Key Sequence
- Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences
- 【矩阵快速幂 】Codeforces 450B - Jzzhu and Sequences (公式转化)
- Compressed Representations of Sequences and Full-Text Indexes(序列的压缩表达和全文索引)
- Oracle get the Primary and foreign Key Column
- ANDROID Porting系列八、Keymaps and Keyboard Input
- PyQt学习笔记(7)--Events and Signals
- 错误:RSA host key for [ip address] has changed and you have requested strict checking.(已解决)
- Laravel No supported encrypter found. The cipher and / or key length are invalid
- (CF#257)B. Jzzhu and Sequences
- UMLOG: (ERROR) Umeng event's keys and values must be string ,key's max length 128 and value's max le
- UIWindow的常用方法。makeKeyWindow、makeKeyAndVisible、获取当前应用的主窗口和所有窗口
- Codeforces Round #243 (Div. 1)——Sereja and Two Sequences
- ASP.NET MVC 5 Controllers and Actions
- Error Code: 1175.You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
- Mysql Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
- 使用XCA(X Certificate and key management)可视化项目经理SSL 凭证(4)--凭借自身的凭证管理中心的定义(Certificate Authority)签名证书申请
- Java keytool and keystore tutorials
- [TypeScript] Query Properties with keyof and Lookup Types in TypeScript