Qt 和 PyQt
2008-09-30 13:08:04 来源:WEB开发网这个 Tk 版本使用了 log_timestamp() 方法作为按钮的 command= 参数。这个方法需要依次单独操作它要影响的所有窗口构件。如果我们想更改按钮按下的效果(例如还要记录时间戳记),那么这个风格就很脆弱。通过继承您可以实现这一点:
清单 2. StdOutLogger.py Tkinter 增强 class StdOutLogger(Logger):
def log_timestamp(self):
Logger.log_timestamp(self)
print self.tslist[-1]
但是这个子类的作者需要相当精确地理解 Logger.log_timestamp() 已经做了什么;而且除非通过在子类中完全重写 .log_timestamp() 方法并且不调用父方法,否则没有办法 除去消息。
一个非常基本的 PyQt 应用程序总有一些样本代码,这些代码在哪里都相同,Tkinter 代码也是这样。但是,当我们进一步研究设置应用程序所需的代码,以及显示窗口构件的代码时,区别就显现出来了。
清单 3. logger-qt.py PyQt 应用程序 #!/usr/bin/env python
import sys, time
from qt import * # Generally advertised as safe
class Logger(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
self.setCaption("Timestamp logging application")
self.layout = QGridLayout(self, 3, 2, 5, 10)
self.tsdisp = QTextEdit(self)
self.tsdisp.setMinimumSize(250, 300)
self.tsdisp.setTextFormat(Qt.PlainText)
self.tscount = QLabel("", self)
self.tscount.setFont(QFont("Sans", 24))
self.log = QPushButton("&Log Timestamp", self)
self.quit = QPushButton("&Quit", self)
self.layout.addMultiCellWidget(self.tsdisp, 0, 2, 0, 0)
self.layout.addWidget(self.tscount, 0, 1)
self.layout.addWidget(self.log, 1, 1)
self.layout.addWidget(self.quit, 2, 1)
self.connect(self.log, SIGNAL("clicked()"),
self.log_timestamp)
self.connect(self.quit, SIGNAL("clicked()"),
self.close)
def log_timestamp(self):
stamp = time.ctime()
self.tsdisp.append(stamp)
self.tscount.setText(str(self.tsdisp.lines()))
if __name__ == "__main__":
app = QApplication(sys.argv)
app.connect(app, SIGNAL('lastWindowClosed()'), app,
SLOT('quit()'))
logger = Logger()
logger.show()
app.setMainWidget(logger)
app.exec_loop()
- ››QT中获取选中的radioButton的两种方法
- ››Qt HMAC hash 算法
- ››Qt中调用windows系统api在QComboBox中显示系统当前...
- ››Qt之实现360安全卫士主界面(三)
- ››Qt for Symbian S60开发环境全接触
- ››Qt for Symbian应用的开发
- ››Qt for Symbian怎样强制使用横屏或竖屏
- ››Qt与symbian特定格式类对象的转换
- ››Qt for symbian工程文件的一些特异写法
- ››QT for Symbian 环境搭建教材下载
- ››Qt for Symbian 入门之环境搭建
- ››Qt for S60 开发环境全接触
更多精彩
赞助商链接