【本实验内容】
1.GUI、PyQT5介绍
2.实现此次实验效果
【一 GUI、PyQt5介绍】
1.Python简介

2.GUI介绍
几个常用的Python GUI库:
(1)wxPython
(2)tkinter
(3)PyQt5

利用PyQt完成的项目效果展示:

【二 实现此次项目效果】

注意:后面代码都是在前面的基础上添加的;

>>>导入模块:

 from PyQt5.QtGui import *  # QtGui:对系统及窗口的操作
from PyQt5.QtCore import * # QtCore:包含一些核心的应用,例如时间模块等;
# QDesktopWidget:包含了屏幕的尺寸
from PyQt5.QtWidgets import QWidget,QDesktopWidget,QLCDNumber,QVBoxLayout,QApplication
import sys

>>>先编写一个闹钟程序的主窗口:

 #  “ADD1”
class MyTime(QWidget):
"""
面向对象的特点:封装、继承、多态---(类、方法、数据)
__init__是python语言里面的构造方法
"""
def __init__(self):
# 用于解决多重继承的问题
super().__init__()
self.initUI() # 绘制UI界面
def initUI(self):
# 窗口组件大小 250px像素 150
self.resize(250,150)
# self.move(300,300)
# 窗口标题:
self.setWindowTitle("创意小时钟-香")
self.show()
# “ADD2”
if __name__ == '__main__':
# 创建一个QT应用对象
app = QApplication(sys.argv)
m_time = MyTime()
sys.exit(app.exec_())
# app.exex_()

>>>  此时运行程序就可以初步构建一个轮廓了,效果如下:

>>>附截止目前的完整代码如下:

 from PyQt5.QtGui import *  # QtGui:对系统及窗口的操作
from PyQt5.QtCore import * # QtCore:包含一些核心的应用,例如时间模块等;
# QDesktopWidget:包含了屏幕的尺寸
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
import sys # “ADD1”
class MyTime(QWidget):
"""
面向对象的特点:封装、继承、多态---(类、方法、数据)
__init__是python语言里面的构造方法
""" def __init__(self):
# 用于解决多重继承的问题
super().__init__()
self.initUI() # 绘制UI界面 def initUI(self):
# 窗口组件大小 250px像素 150
self.resize(250, 150)
# self.move(300,300)
# 窗口标题:
self.setWindowTitle("创意小时钟-香")
self.show() # “ADD2”
if __name__ == '__main__':
# 创建一个QT应用对象
app = QApplication(sys.argv)
m_time = MyTime()
sys.exit(app.exec_())
# app.exex_()

窗口名字默认左上角,可以设置的;
>>>此时,时钟程序没有在正中心,因此进行继续编程解决这个问题:
         # “ADD2”
# 调用
self.move_center() # 在initUI()方法的self.show()语句前面增加 # “ADD1”
def move_center(self):
# 拿到主窗口的矩形
m_rect = self.frameGeometry()
# 获得整个屏幕的绝对值,从中得到屏幕的中心点
w_center_top = QDesktopWidget().availableGeometry().center()
m_rect.moveCenter(w_center_top)
# 从左向右边移动,直到屏幕中间的位置
self.move(m_rect.topLeft())

>>>现在运行,时钟程序窗口居中了:

>>>附截止目前的完整代码如下:

 from PyQt5.QtGui import *  # QtGui:对系统及窗口的操作
from PyQt5.QtCore import * # QtCore:包含一些核心的应用,例如时间模块等;
# QDesktopWidget:包含了屏幕的尺寸
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
import sys, time class MyTime(QWidget):
"""
面向对象的特点:封装、继承、多态---(类、方法、数据)
__init__是python语言里面的构造方法
""" def __init__(self):
# 用于解决多重继承的问题
super().__init__()
self.initUI()
# 绘制UI界面 def initUI(self):
# 窗口组件大小 250px 150
self.resize(250, 150)
# self.move(300,300)
# 窗口标题:
self.setWindowTitle("创意小时钟-香")
# 调用
self.move_center() # “ADD2”
self.show()
# “ADD1”
def move_center(self):
# 拿到主窗口的矩形
m_rect = self.frameGeometry()
# 获得整个屏幕的绝对值,从中得到屏幕的中心点
w_center_top = QDesktopWidget().availableGeometry().center()
m_rect.moveCenter(w_center_top)
# 从左向右边移动,直到屏幕中间的位置 if __name__ == '__main__':
# 创建一个QT应用对象
app = QApplication(sys.argv)
m_time = MyTime()
sys.exit(app.exec_())
# app.exex_()

>>>现在编程里面的LED数字时钟:

 import time  # “ADD1”:增加时间time模块

         # “ADD2 在initUI()方法的self.show()语句后面增加
self.lcd = QLCDNumber()
# 设置显示的个数
self.lcd.setDigitCount(10)
# 设置显示的模式为十进制的
self.lcd.setMode(QLCDNumber.Dec)
# 设置显示的模式为 平面模式
self.lcd.setSegmentStyle(QLCDNumber.Flat)
# 获取本地时间
self.lcd.display(time.strftime("%X", time.localtime()))
self.main_layout = QVBoxLayout()
# 将显示的组件添加到盒子布局里面
self.main_layout.addWidget(self.lcd)
# 设置组件在布局的中间位置
self.main_layout.setAlignment(Qt.AlignCenter)
# 设置给顶层布局
self.setLayout(self.main_layout)

>>>附截止目前的完整代码如下:

 from PyQt5.QtGui import *  # QtGui:对系统及窗口的操作
from PyQt5.QtCore import * # QtCore:包含一些核心的应用,例如时间模块等;
# QDesktopWidget:包含了屏幕的尺寸
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
import sys,time # “ADD1”:增加时间time模块 class MyTime(QWidget):
"""
面向对象的特点:封装、继承、多态---(类、方法、数据)
__init__是python语言里面的构造方法
""" def __init__(self):
# 用于解决多重继承的问题
super().__init__()
self.initUI() # 绘制UI界面 def initUI(self):
# 窗口组件大小 250px像素 150
self.resize(250, 150)
# self.move(300,300)
# 窗口标题:
self.setWindowTitle("创意小时钟-香")
# 调用
self.move_center()
self.show() # "ADD2
self.lcd = QLCDNumber()
# 设置显示的个数
self.lcd.setDigitCount(10)
# 设置显示的模式为十进制的
self.lcd.setMode(QLCDNumber.Dec)
# 设置显示的模式为 平面模式
self.lcd.setSegmentStyle(QLCDNumber.Flat)
# 获取本地时间
self.lcd.display(time.strftime("%X", time.localtime()))
self.main_layout = QVBoxLayout()
# 将显示的组件添加到盒子布局里面
self.main_layout.addWidget(self.lcd)
# 设置组件在布局的中间位置
self.main_layout.setAlignment(Qt.AlignCenter)
# 设置给顶层布局
self.setLayout(self.main_layout) def move_center(self):
# 拿到主窗口的矩形
m_rect = self.frameGeometry()
# 获得整个屏幕的绝对值,从中得到屏幕的中心点
w_center_top = QDesktopWidget().availableGeometry().center()
m_rect.moveCenter(w_center_top)
# 从左向右边移动,直到屏幕中间的位置
self.move(m_rect.topLeft()) if __name__ == '__main__':
# 创建一个QT应用对象
app = QApplication(sys.argv)
m_time = MyTime()
sys.exit(app.exec_())
# app.exex_()

>>>现在运行一下,查看结果,但是现在的问题是,时钟上是静态的?


现在解决这个时钟实时更新这个问题。

>>>ADD1 写一个有关定时器的“槽与信号”的函数:

     def init_timer(self):
# 提供了定时器信号和单出发定时器
self.timer = QTimer()
# 每间隔1秒就出发一次 timeout信号
self.timer.setInterval(1000)
self.timer.start() # 启动这个定时器
self.timer.timeout.connect(self.update_timer) # 信号和槽函数

>>>ADD2写一个输出本地实时时间的函数:

     def update_timer(self):
# 获取本地时间
self.lcd.display(time.strftime("%X", time.localtime()))
注意: 删除原来initUI()函数中的此行
# # 获取本地时间
# self.lcd.display(time.strftime("%X", time.localtime()))
>>>ADD3:调用“信号与槽函数”
         # ADD3:
self.init_timer()

>>>现在运行,结果时钟可以实时更新时间了:

>>>附截止目前的完整代码如下:

 from PyQt5.QtGui import *  # QtGui:对系统及窗口的操作
from PyQt5.QtCore import * # QtCore:包含一些核心的应用,例如时间模块等;
# QDesktopWidget:包含了屏幕的尺寸
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
import sys,time # “ADD1” class MyTime(QWidget):
"""
面向对象的特点:封装、继承、多态---(类、方法、数据)
__init__是python语言里面的构造方法
""" def __init__(self):
# 用于解决多重继承的问题
super().__init__()
self.initUI()
# ADD3:
self.init_timer()
# 绘制UI界面
# ADD1:
def init_timer(self):
# 提供了定时器信号和单出发定时器
self.timer = QTimer()
# 每间隔1秒就出发一次 timeout信号
self.timer.setInterval(1000)
self.timer.start() # 启动这个定时器
self.timer.timeout.connect(self.update_timer) # 信号和槽函数
# ADD2:
def update_timer(self):
# 获取本地时间
self.lcd.display(time.strftime("%X", time.localtime())) def initUI(self):
# 窗口组件大小 250px像素 150
self.resize(250, 150)
# self.move(300,300)
# 窗口标题:
self.setWindowTitle("创意小时钟-香")
# 调用
self.move_center()
self.show() self.lcd = QLCDNumber()
# 设置显示的个数
self.lcd.setDigitCount(10)
# 设置显示的模式为十进制的
self.lcd.setMode(QLCDNumber.Dec)
# 设置显示的模式为 平面模式
self.lcd.setSegmentStyle(QLCDNumber.Flat) # # 获取本地时间
# self.lcd.display(time.strftime("%X", time.localtime()))
self.main_layout = QVBoxLayout()
# 将显示的组件添加到盒子布局里面
self.main_layout.addWidget(self.lcd)
# 设置组件在布局的中间位置
self.main_layout.setAlignment(Qt.AlignCenter)
# 设置给顶层布局
self.setLayout(self.main_layout) def move_center(self):
# 拿到主窗口的矩形
m_rect = self.frameGeometry()
# 获得整个屏幕的绝对值,从中得到屏幕的中心点
w_center_top = QDesktopWidget().availableGeometry().center()
m_rect.moveCenter(w_center_top)
# 从左向右边移动,直到屏幕中间的位置
self.move(m_rect.topLeft()) if __name__ == '__main__':
# 创建一个QT应用对象
app = QApplication(sys.argv)
m_time = MyTime()
sys.exit(app.exec_())
# app.exex_()

发现,它的背景颜色太单调了,这时PyQt5中有一个“调色板”:
>>>ADD1:实例化一个调色板
         # 实例化一个调色板
self.main_pl = QPalette()
# 设置背景颜色为深黄色
# self.main_pl.setColor(QPalette.Background,Qt.darkRed)
self.main_pl.setColor(QPalette.Background, Qt.darkYellow)
# 设置窗体自动填充背景颜色
self.setAutoFillBackground(True)
self.setPalette(self.main_pl)

>>> 现在运行,查看结果:

>>>附截止目前的完整代码如下:

 from PyQt5.QtGui import *  # QtGui:对系统及窗口的操作
from PyQt5.QtCore import * # QtCore:包含一些核心的应用,例如时间模块等;
# QDesktopWidget:包含了屏幕的尺寸
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
import sys,time # “ADD1” class MyTime(QWidget):
"""
面向对象的特点:封装、继承、多态---(类、方法、数据)
__init__是python语言里面的构造方法
""" def __init__(self):
# 用于解决多重继承的问题
super().__init__()
self.initUI()
self.init_timer()
# 绘制UI界面 def init_timer(self):
# 提供了定时器信号和单出发定时器
self.timer = QTimer()
# 每间隔1秒就出发一次 timeout信号
self.timer.setInterval(1000)
self.timer.start() # 启动这个定时器
self.timer.timeout.connect(self.update_timer) # 信号和槽函数 def update_timer(self):
# 获取本地时间
self.lcd.display(time.strftime("%X", time.localtime())) def initUI(self):
# 窗口组件大小 250px像素 150
self.resize(250, 150)
# self.move(300,300)
# 窗口标题:
self.setWindowTitle("创意小时钟-香")
# 调用
self.move_center()
# ADD1:实例化一个调色板
# 实例化一个调色板
self.main_pl = QPalette()
# 设置背景颜色为深黄色
# self.main_pl.setColor(QPalette.Background,Qt.darkRed)
self.main_pl.setColor(QPalette.Background, Qt.darkYellow)
# 设置窗体自动填充背景颜色
self.setAutoFillBackground(True)
self.setPalette(self.main_pl) self.show()
self.lcd = QLCDNumber()
# 设置显示的个数
self.lcd.setDigitCount(10)
# 设置显示的模式为十进制的
self.lcd.setMode(QLCDNumber.Dec)
# 设置显示的模式为 平面模式
self.lcd.setSegmentStyle(QLCDNumber.Flat) # # 获取本地时间
# self.lcd.display(time.strftime("%X", time.localtime()))
self.main_layout = QVBoxLayout()
# 将显示的组件添加到盒子布局里面
self.main_layout.addWidget(self.lcd)
# 设置组件在布局的中间位置
self.main_layout.setAlignment(Qt.AlignCenter)
# 设置给顶层布局
self.setLayout(self.main_layout) def move_center(self):
# 拿到主窗口的矩形
m_rect = self.frameGeometry()
# 获得整个屏幕的绝对值,从中得到屏幕的中心点
w_center_top = QDesktopWidget().availableGeometry().center()
m_rect.moveCenter(w_center_top)
# 从左向右边移动,直到屏幕中间的位置
self.move(m_rect.topLeft()) if __name__ == '__main__':
# 创建一个QT应用对象
app = QApplication(sys.argv)
m_time = MyTime()
sys.exit(app.exec_())
# app.exex_()

>>>最后此项目的完整代码如下:

 from PyQt5.QtGui import *  # QtGui:对系统及窗口的操作
from PyQt5.QtCore import * # QtCore:包含一些核心的应用,例如时间模块等;
# QDesktopWidget:包含了屏幕的尺寸
from PyQt5.QtWidgets import QWidget,QDesktopWidget,QLCDNumber,QVBoxLayout,QApplication
import sys,time class MyTime(QWidget):
"""
面向对象的特点:封装、继承、多态---(类、方法、数据)
__init__是python语言里面的构造方法
"""
def __init__(self): # self指的是类实例对象的本身(PS:不是类本身)
# 用于解决多重继承的问题
super().__init__()
self.initUI()
self.init_timer()
def init_timer(self):
# 提供了定时器信号和单出发定时器
self.timer = QTimer()
# 每间隔1秒就出发一次 timeout信号
self.timer.setInterval(1000)
self.timer.start() # 启动这个定时器
self.timer.timeout.connect(self.update_timer) # 信号和槽函数
def update_timer(self):
# 获取本地时间
self.lcd.display(time.strftime("%X", time.localtime())) # 绘制UI界面
def initUI(self):
# 窗口组件大小 250px 150
self.resize(250,150)
# self.move(300,300)
# 窗口标题:
self.setWindowTitle("创意小时钟-香")
# 调用
self.move_center() # 实例化一个调色板
self.main_pl = QPalette()
# 设置背景颜色为深黄色
# self.main_pl.setColor(QPalette.Background,Qt.darkRed)
self.main_pl.setColor(QPalette.Background, Qt.darkYellow)
# 设置窗体自动填充背景颜色
self.setAutoFillBackground(True)
self.setPalette(self.main_pl) # 字体颜色的设置:这里有问题:
# self.main_pl = QPalette()
# self.main_pl.setColor(QPalette.Normal, QPalette.windowText,Qt.darkBlue)
# self.setAutoFillBackground(True)
# self.setPalette(self.main_pl) # 显示布局
self.show() self.lcd = QLCDNumber()
# 设置显示的个数
self.lcd.setDigitCount(10)
# 设置显示的模式为十进制的
self.lcd.setMode(QLCDNumber.Dec)
# 设置显示的模式为 平面模式
self.lcd.setSegmentStyle(QLCDNumber.Flat)
# 实例化盒子布局
self.main_layout = QVBoxLayout()
# 将显示的组件添加到盒子布局里面
self.main_layout.addWidget(self.lcd)
# 设置组件在布局的中间位置
self.main_layout.setAlignment(Qt.AlignCenter)
# 设置给顶层布局
self.setLayout(self.main_layout) def move_center(self):
# 拿到主窗口的矩形
m_rect = self.frameGeometry()
# 获得整个屏幕的绝对值,从中得到屏幕的中心点
w_center_top = QDesktopWidget().availableGeometry().center()
m_rect.moveCenter(w_center_top)
# 从左向右边移动,直到屏幕中间的位置
self.move(m_rect.topLeft())
if __name__ == '__main__':
# 创建一个QT应用对象
app = QApplication(sys.argv)
m_time = MyTime()
sys.exit(app.exec_())
# app.exex_()

The end!

**************************************************************************************************
                                                        Good lucky to you
**************************************************************************************************

【python】实现一个python编程的小时钟!的更多相关文章

  1. 一听就懂:用Python做一个超简单的小游戏

    写它会用到 while 循环random 模块if 语句输入输出函数

  2. python 搭建一个http服务的小例子

    一.创建Server 1.Dos 命令 python -m BaseHTTPServer [port] 默认端口是8000, 2.Python 脚本启动 #coding:utf-8 ''' Creat ...

  3. Python编写一个Python脚本

    我想要一个可以为我的所有重要文件创建备份的程序.(下面测试环境为python2.7) 1.backup_ver1.py #!/usr/bin/python import os import time ...

  4. 【Python】一个python实例:给重要的文件创建备份.摘自crossin-python简明教程

    问题:写一个可以为所有重要文件创建备份的程序 考虑:源路径和目标路径各是什么;所有重要文件-有哪些;备份文件格式是什么;定期备份的话,备份文件名称如何规定等等.(ps,我自己只想到一个路径和名称) 程 ...

  5. Python——第一个python程序helloworld

    安装了Python的环境之后,就是编写Python的代码了. 首先,我们来写一个简单的“hello world” 新建一个空白的txt文本,将后缀改为.py 改了后缀之后即变为Python程序的图标 ...

  6. Python 第一个Python项目Hello,Python 学习之路(二)

    print("Hello,Python")

  7. Python ->> 第一个Python程序

    #coding:utf-8 #print 'input your name, please' #name = raw_input('请输入你的名字:'.decode('utf-8').encode(' ...

  8. Python基础入门-实现猜数字小游戏

    今天呢,我们来通过前面学过的一些知识点来完成一个猜数字大小的游戏程序设计.那么呢,一般人写代码直接上来就干,没有分析,这样的做法是没有产出的,除非你是大牛,今天呢,我会把我学习编程的思路分享给大家,我 ...

  9. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题

    今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...

随机推荐

  1. c# 分析SQL语句中的表操作

    最近写了很多方向的总结和demo.基本包含了工作中的很多方面,毕竟c#已经高度封装并且提供了很多类库.前面已经总结了博文.最近2天突然感觉前面的SQL分析阻组件的确麻烦,也注意看了下.为了方便大家学习 ...

  2. java各种业务解决方案总结

    最近有点时间,突然感慨良多,感觉辛苦工作这么久什么都没有,总结了以前的工作,将接触的主要工具列出来,希望给大家解决问题做参考.相关工具都是实践检验过的 1.数据库 (1).内存数据库 redis (2 ...

  3. 编写可维护的JavaScript---事件处理

    在JavaScript应用中事件处理是非常重要的,所有的JavaScript都是通过事件绑定到UI上的. 1. 典型用法 当事件触发的时候,事件对象event会最为回调参数传入到事件处理程序中.eve ...

  4. BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头(模拟 调和级数)

    Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 3031  Solved: 1596[Submit][Status][Discuss] Descriptio ...

  5. flask 中访问时后台错误 error: [Errno 32] Broken pipe

    解决办法:app.run(threaded=True) 个人理解:flask默认单线程,访问一个页面时会访问到很多页面,比如一些图片,加入参数使其为多线程

  6. 基于OMAPL:Linux3.3内核的编译

    基于OMAPL:Linux3.3内核的编译 OMAPL对应3个版本的linux源代码,分别是:Linux-3.3.Linux-2.6.37.Linux2.6.33,这里的差距在于Linux2,缺少SY ...

  7. HTTP学习之HTTP基础

    学习HTTP技术,首先要了解它的在web通信中有哪些特点,起到什么作用.有哪些规范.都有什么功能. HTTP的特点 HTTP使用的是一种可靠的.快速响应的数据传输协议,用户一旦发起请求,Web服务器可 ...

  8. http一些常见知识记录

    HTTP请求包(浏览器信息) 我们先来看看Request包的结构, Request包分为3部分,第一部分叫Request line(请求行), 第二部分叫Request header(请求头),第三部 ...

  9. 单片机C51 8位流水灯

    #include<reg51.h> sbit P1_0=0X90; sbit P1_1=0x91; sbit P1_2=0x92; sbit P1_3=0x93; sbit P1_4=0x ...

  10. R语言学习笔记(二十):stringr包中函数介绍(表格)

    stringr包中的重要函数 函数 功能说明 R Base中对应函数 使用正则表达式的函数 str_extract() 提取首个匹配模式的字符 regmatches() str_extract_all ...