主窗口
QMainWindow类给我们提供了一个程序主窗口,使得我们能够创建一个标准的程序框架,包括了状态栏,工具栏和菜单栏。
状态栏(Statusbar)
状态栏就是一种用来显示状态信息的小部件.
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
这里需要注意的就是这一句,通过调用QMainWindow类的statusBar()方法,得到statusbar的句柄,然后调用showMessage()显示信息在statusbar上.非常容易吧!
菜单栏(Menubar)
菜单是应用程序中最常见的一种组件.通常每个菜单都是完成不同的任务.
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
file = menubar.addMenu( ' &File ' )
file.addAction(exit)
首先调用self.menuBar()创建菜单栏,接着调用addMenu()添加一个菜单,最后给菜单添加一个动作,就是这里的exit.
工具栏(Toolbar)
菜单可以将不同的命令按组分类,然而,有些常用的命令就可以通过工具栏来放置,这样更便于使用.
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.setShortcut( ' Ctrl+Q ' )
GUI程序是通过命令来控制的, 而这些命令可以由菜单,上下文菜单,工具栏或者快捷键来发出. PyQt将命令抽象为actions. 一个action对象可以有text, 图标, 快捷键, 状态栏描述, "What's This?"描述和tooltip. 上面的例子,就定义了icon, tooltip和shortcut.
这一句,将action的triggered()信号和预先定义的close()槽结合到一起.
self.toolbar.addAction(self.exit)
然后就将定义好的action放入toolbar就可以了.
Figure: toolbar
一个完整的程序
最后这个部分,将menubar, toolbar和statusbar放在一起.
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
self.setCentralWidget(textEdit)
这里创建了一个edit部件,并将其设置为QMainWindow的中央部件.中央部件就是说要占据初菜单,工具栏,状态栏之外的所有空间.