Authors: | 机械唯物主义 <[email protected]> |
---|---|
Date: | 2010-11-09 |
PyQt4是我见到过的最好用的GUI开发库, 具体不多讲, 直接上例子.
Contents
- 计算器
- 10分钟
pyqt实现一个简单的计算器界面, 只需要10分钟.
这个是计算器的代码:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Caculator(QDialog):
def __init__(self):
super(Caculator, self).__init__()
#widgets
self.leInput = QLineEdit()
self.lwResult = QListWidget()
#layouts
l = QVBoxLayout(self)
for w in self.leInput, self.lwResult:
l.addWidget(w)
#events
self.leInput.returnPressed.connect(self.caculate)
def caculate(self):
data = unicode(self.leInput.text())
if not data: return
self.leInput.clear()
try:
result = unicode(eval(data))
except Exception as e:
result = unicode(e)
self.lwResult.addItem(result)
def main():
app = QApplication([])
Caculator().exec_()
if __name__=="__main__":
main()
QObject |----- QWidget |----- QDialog |----- QLineEdit |----- QListWidget
以及计算器这个界面的控件是如何组织的.
qt采用非常简洁的方式来组织界面. 只需要设置子控件是如何在父控件上面排列的, qt自动帮你调整好大小.
层级:
QDialog (QVBoxLayout) |----- QLineEdit |----- QListWidget
代码:
l = QVBoxLayout(self)
for w in self.leInput, self.lwResult:
l.addWidget(w)
至于消息如何传递的呢? 只需要把一个消息链接到处理的方法上面就好了.
- Qt:
this->connect(leInput, SINGAL(returnPressed()), this, caculate))
- PyQt:
self.leInput.returnPressed.connect(self.caculate)
pyqt比qt要简单得多, pythonic!
- 花费时间: 2个晚上, 基础:2.5小时, 一点点提升:1小时
- 扫雷下载: pyqtmine
上面是基础的一些概念, 我们深入一些, 看看更复杂的例子. 比如一个扫雷的程序(其实也很简单)
自己写UI是不是太复杂了? 拖拖拉拉不是更好? qt提供了这样的一个工具. 非常好用! 可以和tk/wxpython等说再见了!
form, base = uic.loadUiType("score.ui")
class ScoreDlg(QDialog, form):
def __init__(self):
super(ScoreDlg, self).__init__()
self.setupUi(self)
写好score.ui之后, 需要补充后面的逻辑, 把ui转换成class, 然后继承就好了.
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
...
def paintEvent(self, event=None):
p = QPainter(self)
...
p.drawLine(mx+i*sx, my, mx+i*sx, my+y*sy)
不是所有的时间机制都可以用signal&slot解决的, 有些事件, 只能通过重载来解决. 比如上面鼠标和画图事件, 必须重载对应的处理函数.
作为一款现代的工业级别的图形库, 是还有其他非常多的特性的, 这里给出一个大致的列表:
- 足够多和好用的控件/自定控件/整合到designer中
- webkit/script支持
- 强大/方便/快速的绘图控件
- 富文本/文本解析
- 多国语言支持
- 其他第三方控件支持: pyqwt
具体有个展示的工具, 如果你安装了qt的话, 可以执行qtdemo, 看看就知道qt能干什么事情了, 并且可以从里面挖出代码来作为参考.
pyinstaller可以完美支持pyqt的打包工作, 不过对于python2.6以上的版本, 需要下载使用开发版本, 这里有 介绍. 不推荐py2exe, 比较复杂.
- PyQt安装
ubuntu:
sudo apt-get install pyqt4-dev-tools
windows可以下载一个python包: pythonxy
- 学习材料
- qt 以及 pyqt 官方网站
- 书籍请google: pyqt book or qt book
- 中文资料: qteverywhere
PyQt4