主窗口
QMainWindow类给我们提供了一个程序主窗口,使得我们能够创建一个标准的程序框架,包括了状态栏,工具栏和菜单栏。
状态栏(Statusbar)
状态栏就是一种用来显示状态信息的小部件.
1 #!/usr/bin/python
2
3 # statusbar.py
4
5 import sys
6 from PyQt4 import QtGui
7
8 class MainWindow(QtGui.QMainWindow):
9 def __init__(self):
10 QtGui.QMainWindow.__init__(self)
11
12 self.resize(250, 150)
13 self.setWindowTitle('statusbar')
14
15 self.statusBar().showMessage('Ready')
16
17 app = QtGui.QApplication(sys.argv)
18 main = MainWindow()
19 main.show()
20 sys.exit(app.exec_())
21
self.statusBar().showMessage(
'
Ready
'
)
这里需要注意的就是这一句,通过调用QMainWindow类的statusBar()方法,得到statusbar的句柄,然后调用showMessage()显示信息在statusbar上.非常容易吧!
菜单栏(Menubar)
菜单是应用程序中最常见的一种组件.通常每个菜单都是完成不同的任务.
1 #!/usr/bin/python
2
3 # menubar.py
4
5 import sys
6 from PyQt4 import QtGui, QtCore
7
8 class MainWindow(QtGui.QMainWindow):
9 def __init__(self):
10 QtGui.QMainWindow.__init__(self)
11
12 self.resize(250, 150)
13 self.setWindowTitle('menubar')
14
15 exit = QtGui.QAction(QtGui.QIcon('icons/web.png'), 'Exit', self)
16 exit.setShortcut('Ctrl+Q')
17 exit.setStatusTip('Exit application')
18 self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
19
20 self.statusBar()
21
22 menubar = self.menuBar()
23 file = menubar.addMenu('&File')
24 file.addAction(exit)
25
26 app = QtGui.QApplication(sys.argv)
27 main = MainWindow()
28 main.show()
29 sys.exit(app.exec_())
30
menubar
=
self.menuBar()
file
=
menubar.addMenu(
'
&File
'
)
file.addAction(exit)
首先调用self.menuBar()创建菜单栏,接着调用addMenu()添加一个菜单,最后给菜单添加一个动作,就是这里的exit.
工具栏(Toolbar)
菜单可以将不同的命令按组分类,然而,有些常用的命令就可以通过工具栏来放置,这样更便于使用.
1 #!/usr/bin/python
2
3 # toolbar.py
4
5 import sys
6 from PyQt4 import QtGui, QtCore
7
8 class MainWindow(QtGui.QMainWindow):
9 def __init__(self):
10 QtGui.QMainWindow.__init__(self)
11
12 self.resize(250, 150)
13 self.setWindowTitle('toolbar')
14
15 self.exit = QtGui.QAction(QtGui.QIcon('icons/web.png'), 'Exit', self)
16 self.exit.setShortcut('Ctrl+Q')
17 self.connect(self.exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
18
19 self.toolbar = self.addToolBar('Exit')
20 self.toolbar.addAction(self.exit)
21
22 app = QtGui.QApplication(sys.argv)
23 main = MainWindow()
24 main.show()
25 sys.exit(app.exec_())
self.exit
=
QtGui.QAction(QtGui.QIcon(
'
icons/web.png
'
),
'
Exit
'
, self)
self.exit.setShortcut(
'
Ctrl+Q
'
)
GUI程序是通过命令来控制的, 而这些命令可以由菜单,上下文菜单,工具栏或者快捷键来发出. PyQt将命令抽象为actions. 一个action对象可以有text, 图标, 快捷键, 状态栏描述, "What's This?"描述和tooltip. 上面的例子,就定义了icon, tooltip和shortcut.
self.connect(self.exit, QtCore.SIGNAL(
'
triggered()
'
), QtCore.SLOT(
'
close()
'
))
这一句,将action的triggered()信号和预先定义的close()槽结合到一起.
self.toolbar
=
self.addToolBar(
'
Exit
'
)
self.toolbar.addAction(self.exit)
然后就将定义好的action放入toolbar就可以了.
Figure: toolbar
一个完整的程序
最后这个部分,将menubar, toolbar和statusbar放在一起.
1 #!/usr/bin/python
2
3 # mainwindow.py
4
5 import sys
6 from PyQt4 import QtGui, QtCore
7
8 class MainWindow(QtGui.QMainWindow):
9 def __init__(self):
10 QtGui.QMainWindow.__init__(self)
11
12 self.resize(350, 250)
13 self.setWindowTitle('mainwindow')
14
15 textEdit = QtGui.QTextEdit()
16 self.setCentralWidget(textEdit)
17
18 exit = QtGui.QAction(QtGui.QIcon('icons/web.png'), 'Exit', self)
19 exit.setShortcut('Ctrl+Q')
20 exit.setStatusTip('Exit application')
21 self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
22
23 self.statusBar()
24
25 menubar = self.menuBar()
26 file = menubar.addMenu('&File')
27 file.addAction(exit)
28
29 toolbar = self.addToolBar('Exit')
30 toolbar.addAction(exit)
31
32 app = QtGui.QApplication(sys.argv)
33 main = MainWindow()
34 main.show()
35 sys.exit(app.exec_())
36
textEdit
=
QtGui.QTextEdit()
self.setCentralWidget(textEdit)
这里创建了一个edit部件,并将其设置为QMainWindow的中央部件.中央部件就是说要占据初菜单,工具栏,状态栏之外的所有空间.