chapter 4 GUI编程简介

4.1 25行弹出式闹钟

import sys
import time 
from PyQt5.QtCore import *
from PyQt5.QtGui import *
app = QApplication(sys.argv)

每个PyQt GUI应用程序都必须有一个QApplication对象。这个对象会提供访问全局信息的能力,如应用程序的目录、屏幕大小(以及对于多线程系统来说,这个应用程序是在哪个屏幕上)等。这个对象还会提供时间循环。

try:
    due = QTime.currenttime()
    message = "Alert!"
    if len(sys.argv) < 2
        raise ValueError
    hours,mins = sys.argv[1].split(':')
    due = QTime(int(hours),int(mins))
    if not due.isValid():
        raise ValueError
    if len(sys.argv) > 2
        message = " ".join(sys.argv[2:])
except ValueError:
    message = "Usage: alert.pyw HH:MM [optional message]"  # 24hr clock
while QTime.currentTime < due:
    time.sleep(20)    # 20 seconds
label = Qlabel("" + message + "")
label = setWindowFlags(Qt.SplashScreen)
label.show()
QTimer.singleShot(60000,app.quit)    # 1 minute
app.exec_()

一个GUI程序需要一些窗口部件,这样就需要用一个标签(label)来显示该消息。


chapter 4 GUI编程简介_第1张图片

4.2 30行的表达式求值程序

类会用表单(form)的形式来进行表示,用来响应用户交互的行为会由方法进行处理,而程序的‘main’部分则会很短小。

from __future__ import division
import sys
from math import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Form(QDialog):
def __init__(self,parent = None):
    super(Form,self).__init__(parent)
    self.browser = QTextBrowser()
    self.lineedit = QLineEdit("Type an expression and press Enter")
    self.lineedit.selectAll()
    layout = QVBoxLayout()
    layout.addWidget(self.browser)
    layout.addWidget(self.lineedit)
    self.setLayout(layout)
    self.lineedit.setFocus()
    self.connect(self.lineedit,SIGNAL("returnPressed()"),self.updateUi)
    self.setWindowTitle("Calculate")
def updateUi(self):
    try:
        text = unicode(self.lineedit.text())
        self.browser.append("%s = %s" % (text,eval(text)))
    except:
        self.browser.append(" %s is invalid!" %text)
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()

4.3 70行的货币转换程序

4.4 信号和槽

你可能感兴趣的:(chapter 4 GUI编程简介)