杂家杂谈  
日历
统计
  • 随笔 - 7
  • 文章 - 1
  • 评论 - 15
  • 引用 - 0

导航

留言簿(2)

随笔分类

随笔档案

Python

搜索

  •  

积分与排名

  • 积分 - 25633
  • 排名 - 1506

最新评论

阅读排行榜

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




posted on 2008-07-26 12:08 glorywine 阅读(3852) 评论(5)  编辑  收藏 所属分类: Python
评论:
  • # re: PyQt4 - (3) 菜单和工具栏  隔叶黄莺 Posted @ 2008-07-28 10:43
    用 QT 还不如用 SWT,在 Unix/Linux 下一般都有 JVM,SWT的jar(含 dll)文件都不大。

    在 Unix/Linux 也有 Python,但是 QT 的安装在 Windows 下稍麻烦,动态库也大,QT 在 GNOME 下又没有。  回复  更多评论   

  • # re: PyQt4 - (3) 菜单和工具栏  glorywine Posted @ 2008-07-28 16:58
    @隔叶黄莺
    我曾经也非常热衷于SWT,后来感觉java的开发效率实在是不敢恭维,代码量太大了。
    喜欢python就是因为他的简洁。
    当然这个是仁者见仁了。
    Qt在windows下已经有基于gpl的二进制包了,安装起来非常方便。  回复  更多评论   

  • # re: PyQt4 - (3) 菜单和工具栏  隔叶黄莺 Posted @ 2008-07-29 00:18
    Qt 的动态库还是很大的

    我一直用的都是类 C/C++ 代码风格的语言,像 python/ruby/groove 这种风格的不习惯。

    所以我也曾经在 vxWidgets、Qt、SWT 这三个跨平台组件中选来选去,还是喜欢上了 SWT。虽然说 Qt和vxWidgets可以用C++编程,是所谓的本地代码,执行效率会高一些,但是他们的动态库比SWT的class+dll还要大。Qt 对于某些系统没有的对等控件也是像 SWT 一样自己来描绘的。

    其他跨平台的如 GTK/GTK++, 和 TCL 配对的 TK 就只是作了解的。  回复  更多评论   

  • # re: PyQt4 - (3) 菜单和工具栏  隔叶黄莺 Posted @ 2008-07-31 14:10
    @glorywine
    Qt在windows下已经有基于gpl的二进制包了,哪有这个下载?  回复  更多评论   

  • # re: PyQt4 - (3) 菜单和工具栏[未登录]  glorywine Posted @ 2008-07-31 19:20
    你可以在这里下载,这个是官网上的.
    http://www.riverbankcomputing.co.uk/software/pyqt/download  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © glorywine Powered by: 博客园 模板提供:沪江博客