Chinaunix首页 | 论坛 | 博客
  • 博客访问: 957953
  • 博文数量: 33
  • 博客积分: 803
  • 博客等级: 军士长
  • 技术积分: 1755
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-05 18:58
个人简介

《Python科学计算》的作者

文章分类

全部博文(33)

文章存档

2016年(1)

2014年(2)

2013年(3)

2012年(27)

分类: Python/Ruby

2012-08-13 16:54:23

Internal Console

Spyder中提供了多种Console,其中Internal Console和Spyder应用程序处于同一进程,因此可以在Internal Console中运行程序修改Spyder的各种界面显示。可以通过菜单 View -> Windows and Toolbars -> Internal Console 显示它。在其中输入的代码将在Spyder进程中运行。也可以通过Internal Console的右键菜单中的Run命令,运行指定的程序。请读者通过这种方式运行本文所介绍的界面增强程序。

用gc模块搜索指定对象的类

虽然Internal Console和Spyder运行于同一进程,但是Spyder并没有把其各个对象添加进Internal Console的名字空间,因此我们无法直接访问Spyder中的各个对象。由于Python中的所有对象都由垃圾收集器管理,因此我们可以通过gc模块搜索到指定的对象。

下面的程序通过gc.get_objects()获取所有的对象,并收集指定类型的对象:

import gc

def find_objects(klass_name):
    objs = []
    if isinstance(klass_name, str):
        klass_name = [klass_name]
    for o in gc.get_objects():
        if type(o).__name__ in klass_name:
            objs.append(o)
    return objs

缩小各个界面元素

QDockWidget

由于现在大多数屏幕都是宽屏,因此我们可以将QDockWidget的标题栏和标签栏都设置为垂直摆放。这个设置在Preferences对话框中的General组中:

  • Vertical dockwidget title bars
  • Vertical dockwidget tabs

而DockWidget的标题栏基本上没有什么用处,因此可以将其隐藏以增加编辑范围。下面的程序找到所有的QDockWidget实例,并将其标题栏设置为一个空的QWidget对象。这样标题栏就会被隐藏:

for dock in find_objects("QDockWidget"):
    title_widget = QWidget()
    dock.setTitleBarWidget(title_widget)

设置样式表

剩下的界面元素都可以通过样式表进行修改,首先找到QApplication对象,然后将其样式设置为plastique,如果是别的样式,滚动条的背景会有些难看:

app = find_objects("QApplication")[0]
app.setStyle(QtGui.QStyleFactory.create("plastique"))

最后我们定义一个样式表,并通过QApplication.setStyleSheet()将其设置为整个应用程序的样式表。

Settings = {
    "tabcolor":"#17B6FF",
    "fontsize":"10px"
}

stylesheet = """
QToolBar{
    icon-size:16px;
    max-height:20px;
    min-height:20px;
    padding:1px;
}

QToolBar QToolButton{
    max-width:24px;
}

QToolBar::handle{
    width:0px;
}

QToolBar QComboBox{
    font-size:%(fontsize)s;
    height:12px;
}

QTabBar{
    text-align: left;
    font-size:10px;
    icon-size:0px;
}

QTabBar::tab {
    padding: 2px;
    font-size:10px;
    border-top-left-radius: 1px;
    border-top-right-radius: 1px;
    border: 1px solid #C4C4C3;
    margin:0px;
    spacing:0px;
    text-align: left;
    max-height:150px;
}

QTabBar::tab:top{
    padding-left:3px;
    padding-right:3px;
}

QTabBar::tab:selected {
     background: %(tabcolor)s;
     padding:1px;
}

QMenuBar{
    font-size:%(fontsize)s;
}

QStatusBar QLabel{
    font-size:%(fontsize)s;
}

QSplitter::handle {
    width:2px;
}

QTreeView{
    font-size:%(fontsize)s;
}

QToolTip{
    color:black;
}

QScrollBar:vertical {
     width: 6px;
     padding:0px;
     border:0px;
     background-color:gray;
}

QScrollBar::handle:vertical {
     background: %(tabcolor)s;
     min-height:30px;
}

QScrollBar:horizontal {
     height: 6px;
     padding:0px;
     border:0px;
     background-color:gray;
}

QScrollBar::handle:horizontal {
     background: %(tabcolor)s;
     min-width:30px;
}
""" % Settings

app.setStyleSheet(stylesheet)

下面是Qt的样式表方面的文档:

Qt样式表参考手册

最终的效果如下图所示:


Spyder的缺省界面


修改之后的界面

Spyder的作者对本文所提到的功能也很感兴趣,为此他添加了两个issure:

  • 采用和本文类似的方法扩大编辑器的显示范围
  • 在Spyder启动时运行用户能自定义的启动脚本程序
阅读(6773) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~