主窗口
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的中央部件.中央部件就是说要占据初菜单,工具栏,状态栏之外的所有空间.