《Python科学计算》的作者
分类: Python/Ruby
2012-08-13 16:54:23
Spyder中提供了多种Console,其中Internal Console和Spyder应用程序处于同一进程,因此可以在Internal Console中运行程序修改Spyder的各种界面显示。可以通过菜单 View -> Windows and Toolbars -> Internal Console 显示它。在其中输入的代码将在Spyder进程中运行。也可以通过Internal Console的右键菜单中的Run命令,运行指定的程序。请读者通过这种方式运行本文所介绍的界面增强程序。
虽然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的标题栏和标签栏都设置为垂直摆放。这个设置在Preferences对话框中的General组中:
而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: