【python】實現一個python編程的小時鍾!


【本實驗內容】
1.GUI、PyQT5介紹
2.實現此次實驗效果
【一 GUI、PyQt5介紹】
1.Python簡介
2.GUI介紹
幾個常用的Python GUI庫:
(1)wxPython
(2)tkinter
(3)PyQt5

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

【二 實現此次項目效果

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

 >>>導入模塊:

1 from PyQt5.QtGui import *  # QtGui:對系統及窗口的操作
2 from PyQt5.QtCore import *  # QtCore:包含一些核心的應用,例如時間模塊等;
3 # QDesktopWidget:包含了屏幕的尺寸
4 from PyQt5.QtWidgets import QWidget,QDesktopWidget,QLCDNumber,QVBoxLayout,QApplication 5 import sys

>>>先編寫一個鬧鍾程序的主窗口:

 1 #  “ADD1”
 2 class MyTime(QWidget):
 3     """
 4     面向對象的特點:封裝、繼承、多態---(類、方法、數據)
 5     __init__是python語言里面的構造方法
 6     """
 7     def __init__(self):
 8         # 用於解決多重繼承的問題
 9         super().__init__()
10         self.initUI()    
11     
12     # 繪制UI界面
13     def initUI(self):
14         # 窗口組件大小 250px像素 150
15         self.resize(250,150)
16         # self.move(300,300)
17         # 窗口標題:
18         self.setWindowTitle("創意小時鍾-香")
19         self.show()
20 # “ADD2”
21 if __name__ == '__main__':
22     # 創建一個QT應用對象
23     app = QApplication(sys.argv)
24     m_time = MyTime()
25     sys.exit(app.exec_())
26     # app.exex_()

>>>  此時運行程序就可以初步構建一個輪廓了,效果如下:

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

 1 from PyQt5.QtGui import *  # QtGui:對系統及窗口的操作
 2 from PyQt5.QtCore import *  # QtCore:包含一些核心的應用,例如時間模塊等;
 3 # QDesktopWidget:包含了屏幕的尺寸
 4 from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
 5 import sys
 6 
 7 # “ADD1”
 8 class MyTime(QWidget):
 9     """
10     面向對象的特點:封裝、繼承、多態---(類、方法、數據)
11     __init__是python語言里面的構造方法
12     """
13 
14     def __init__(self):
15         # 用於解決多重繼承的問題
16         super().__init__()
17         self.initUI()
18 
19         # 繪制UI界面
20 
21     def initUI(self):
22         # 窗口組件大小 250px像素 150
23         self.resize(250, 150)
24         # self.move(300,300)
25         # 窗口標題:
26         self.setWindowTitle("創意小時鍾-香")
27         self.show()
28 
29 # “ADD2”
30 if __name__ == '__main__':
31     # 創建一個QT應用對象
32     app = QApplication(sys.argv)
33     m_time = MyTime()
34     sys.exit(app.exec_())
35     # app.exex_()
View Code

窗口名字默認左上角, 可以設置的;
>>>此時,時鍾程序沒有在正中心,因此進行繼續編程解決這個問題:
 1         # “ADD2”
 2         # 調用
 3         self.move_center() # 在initUI()方法的self.show()語句前面增加       
 4  
 5     # “ADD1”   
 6     def move_center(self):
 7         # 拿到主窗口的矩形
 8         m_rect = self.frameGeometry()
 9         # 獲得整個屏幕的絕對值,從中得到屏幕的中心點
10         w_center_top = QDesktopWidget().availableGeometry().center()
11         m_rect.moveCenter(w_center_top)
12         # 從左向右邊移動,直到屏幕中間的位置
13         self.move(m_rect.topLeft())  

>>>現在運行,時鍾程序窗口居中了:

 

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

 1 from PyQt5.QtGui import *  # QtGui:對系統及窗口的操作
 2 from PyQt5.QtCore import *  # QtCore:包含一些核心的應用,例如時間模塊等;
 3 # QDesktopWidget:包含了屏幕的尺寸
 4 from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
 5 import sys, time
 6 
 7 
 8 class MyTime(QWidget):
 9     """
10     面向對象的特點:封裝、繼承、多態---(類、方法、數據)
11     __init__是python語言里面的構造方法
12     """
13 
14     def __init__(self):
15         # 用於解決多重繼承的問題
16         super().__init__()
17         self.initUI()
18         # 繪制UI界面
19 
20     def initUI(self):
21         # 窗口組件大小 250px 150
22         self.resize(250, 150)
23         # self.move(300,300)
24         # 窗口標題:
25         self.setWindowTitle("創意小時鍾-香")
26         # 調用
27         self.move_center()  # “ADD2”
28         self.show()
29     # “ADD1”
30     def move_center(self):
31         # 拿到主窗口的矩形
32         m_rect = self.frameGeometry()
33         # 獲得整個屏幕的絕對值,從中得到屏幕的中心點
34         w_center_top = QDesktopWidget().availableGeometry().center()
35         m_rect.moveCenter(w_center_top)
36         # 從左向右邊移動,直到屏幕中間的位置
37 
38 
39 if __name__ == '__main__':
40     # 創建一個QT應用對象
41     app = QApplication(sys.argv)
42     m_time = MyTime()
43     sys.exit(app.exec_())
44     # app.exex_()
View Code

>>>現在編程里面的LED數字時鍾:

 1 import time  # “ADD1”:增加時間time模塊
 2 
 3         # “ADD2 在initUI()方法的self.show()語句后面增加  
 4         self.lcd = QLCDNumber()
 5         # 設置顯示的個數
 6         self.lcd.setDigitCount(10)
 7         # 設置顯示的模式為十進制的
 8         self.lcd.setMode(QLCDNumber.Dec)
 9         # 設置顯示的模式為  平面模式
10         self.lcd.setSegmentStyle(QLCDNumber.Flat)
11         # 獲取本地時間
12         self.lcd.display(time.strftime("%X", time.localtime()))
13         self.main_layout = QVBoxLayout()
14         # 將顯示的組件添加到盒子布局里面
15         self.main_layout.addWidget(self.lcd)
16         # 設置組件在布局的中間位置
17         self.main_layout.setAlignment(Qt.AlignCenter)
18         # 設置給頂層布局
19         self.setLayout(self.main_layout)

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

 1 from PyQt5.QtGui import *  # QtGui:對系統及窗口的操作
 2 from PyQt5.QtCore import *  # QtCore:包含一些核心的應用,例如時間模塊等;
 3 # QDesktopWidget:包含了屏幕的尺寸
 4 from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
 5 import sys,time  # “ADD1”:增加時間time模塊
 6 
 7 
 8 
 9 class MyTime(QWidget):
10     """
11     面向對象的特點:封裝、繼承、多態---(類、方法、數據)
12     __init__是python語言里面的構造方法
13     """
14 
15     def __init__(self):
16         # 用於解決多重繼承的問題
17         super().__init__()
18         self.initUI()
19 
20         # 繪制UI界面
21 
22     def initUI(self):
23         # 窗口組件大小 250px像素 150
24         self.resize(250, 150)
25         # self.move(300,300)
26         # 窗口標題:
27         self.setWindowTitle("創意小時鍾-香")
28         # 調用
29         self.move_center()
30         self.show()
31         
32         # "ADD2
33         self.lcd = QLCDNumber()
34         # 設置顯示的個數
35         self.lcd.setDigitCount(10)
36         # 設置顯示的模式為十進制的
37         self.lcd.setMode(QLCDNumber.Dec)
38         # 設置顯示的模式為  平面模式
39         self.lcd.setSegmentStyle(QLCDNumber.Flat)
40         # 獲取本地時間
41         self.lcd.display(time.strftime("%X", time.localtime()))
42         self.main_layout = QVBoxLayout()
43         # 將顯示的組件添加到盒子布局里面
44         self.main_layout.addWidget(self.lcd)
45         # 設置組件在布局的中間位置
46         self.main_layout.setAlignment(Qt.AlignCenter)
47         # 設置給頂層布局
48         self.setLayout(self.main_layout)
49 
50     def move_center(self):
51         # 拿到主窗口的矩形
52         m_rect = self.frameGeometry()
53         # 獲得整個屏幕的絕對值,從中得到屏幕的中心點
54         w_center_top = QDesktopWidget().availableGeometry().center()
55         m_rect.moveCenter(w_center_top)
56         # 從左向右邊移動,直到屏幕中間的位置
57         self.move(m_rect.topLeft())
58 
59 if __name__ == '__main__':
60     # 創建一個QT應用對象
61     app = QApplication(sys.argv)
62     m_time = MyTime()
63     sys.exit(app.exec_())
64     # app.exex_()

>>>現在運行一下,查看結果,但是現在的問題是,時鍾上是靜態的?


現在解決這個時鍾實時更新這個問題。

 >>>ADD1 寫一個有關定時器的“槽與信號”的函數:

1     def init_timer(self):
2         # 提供了定時器信號和單出發定時器
3         self.timer = QTimer()
4         # 每間隔1秒就出發一次 timeout信號
5         self.timer.setInterval(1000)
6         self.timer.start()  # 啟動這個定時器
7         self.timer.timeout.connect(self.update_timer)  # 信號和槽函數

>>>ADD2寫一個輸出本地實時時間的函數:

1     def update_timer(self):
2         # 獲取本地時間
3         self.lcd.display(time.strftime("%X", time.localtime()))
注意: 刪除原來initUI()函數中的此行
# # 獲取本地時間
# self.lcd.display(time.strftime("%X", time.localtime()))
>>>ADD3:調用“信號與槽函數”
1         # ADD3:
2         self.init_timer()

>>>現在運行,結果時鍾可以實時更新時間了:    

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

 1 from PyQt5.QtGui import *  # QtGui:對系統及窗口的操作
 2 from PyQt5.QtCore import *  # QtCore:包含一些核心的應用,例如時間模塊等;
 3 # QDesktopWidget:包含了屏幕的尺寸
 4 from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
 5 import sys,time  # “ADD1”
 6 
 7 
 8 
 9 class MyTime(QWidget):
10     """
11     面向對象的特點:封裝、繼承、多態---(類、方法、數據)
12     __init__是python語言里面的構造方法
13     """
14 
15     def __init__(self):
16         # 用於解決多重繼承的問題
17         super().__init__()
18         self.initUI()
19         # ADD3:
20         self.init_timer()
21         # 繪制UI界面
22     # ADD1:
23     def init_timer(self):
24         # 提供了定時器信號和單出發定時器
25         self.timer = QTimer()
26         # 每間隔1秒就出發一次 timeout信號
27         self.timer.setInterval(1000)
28         self.timer.start()  # 啟動這個定時器
29         self.timer.timeout.connect(self.update_timer)  # 信號和槽函數
30     # ADD2:
31     def update_timer(self):
32         # 獲取本地時間
33         self.lcd.display(time.strftime("%X", time.localtime()))
34 
35     def initUI(self):
36         # 窗口組件大小 250px像素 150
37         self.resize(250, 150)
38         # self.move(300,300)
39         # 窗口標題:
40         self.setWindowTitle("創意小時鍾-香")
41         # 調用
42         self.move_center()
43         self.show()
44 
45         self.lcd = QLCDNumber()
46         # 設置顯示的個數
47         self.lcd.setDigitCount(10)
48         # 設置顯示的模式為十進制的
49         self.lcd.setMode(QLCDNumber.Dec)
50         # 設置顯示的模式為  平面模式
51         self.lcd.setSegmentStyle(QLCDNumber.Flat)
52 
53         # # 獲取本地時間
54         # self.lcd.display(time.strftime("%X", time.localtime()))
55         self.main_layout = QVBoxLayout()
56         # 將顯示的組件添加到盒子布局里面
57         self.main_layout.addWidget(self.lcd)
58         # 設置組件在布局的中間位置
59         self.main_layout.setAlignment(Qt.AlignCenter)
60         # 設置給頂層布局
61         self.setLayout(self.main_layout)
62 
63     def move_center(self):
64         # 拿到主窗口的矩形
65         m_rect = self.frameGeometry()
66         # 獲得整個屏幕的絕對值,從中得到屏幕的中心點
67         w_center_top = QDesktopWidget().availableGeometry().center()
68         m_rect.moveCenter(w_center_top)
69         # 從左向右邊移動,直到屏幕中間的位置
70         self.move(m_rect.topLeft())
71 
72 if __name__ == '__main__':
73     # 創建一個QT應用對象
74     app = QApplication(sys.argv)
75     m_time = MyTime()
76     sys.exit(app.exec_())
77     # app.exex_()
View Code

發現,它的背景顏色太單調了,這時PyQt5中有一個“調色板”:
>>>ADD1:實例化一個調色板
1         # 實例化一個調色板
2         self.main_pl = QPalette()
3         # 設置背景顏色為深黃色
4         # self.main_pl.setColor(QPalette.Background,Qt.darkRed)
5         self.main_pl.setColor(QPalette.Background, Qt.darkYellow)
6         # 設置窗體自動填充背景顏色
7         self.setAutoFillBackground(True)
8         self.setPalette(self.main_pl)

>>> 現在運行,查看結果:

 

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

 1 from PyQt5.QtGui import *  # QtGui:對系統及窗口的操作
 2 from PyQt5.QtCore import *  # QtCore:包含一些核心的應用,例如時間模塊等;
 3 # QDesktopWidget:包含了屏幕的尺寸
 4 from PyQt5.QtWidgets import QWidget, QDesktopWidget, QLCDNumber, QVBoxLayout, QApplication
 5 import sys,time  # “ADD1”
 6 
 7 
 8 
 9 class MyTime(QWidget):
10     """
11     面向對象的特點:封裝、繼承、多態---(類、方法、數據)
12     __init__是python語言里面的構造方法
13     """
14 
15     def __init__(self):
16         # 用於解決多重繼承的問題
17         super().__init__()
18         self.initUI()    
19         self.init_timer()
20         # 繪制UI界面
21 
22     def init_timer(self):
23         # 提供了定時器信號和單出發定時器
24         self.timer = QTimer()
25         # 每間隔1秒就出發一次 timeout信號
26         self.timer.setInterval(1000)
27         self.timer.start()  # 啟動這個定時器
28         self.timer.timeout.connect(self.update_timer)  # 信號和槽函數
29 
30     def update_timer(self):
31         # 獲取本地時間
32         self.lcd.display(time.strftime("%X", time.localtime()))
33 
34     def initUI(self):
35         # 窗口組件大小 250px像素 150
36         self.resize(250, 150)
37         # self.move(300,300)
38         # 窗口標題:
39         self.setWindowTitle("創意小時鍾-香")
40         # 調用
41         self.move_center()
42         # ADD1:實例化一個調色板
43         # 實例化一個調色板
44         self.main_pl = QPalette()
45         # 設置背景顏色為深黃色
46         # self.main_pl.setColor(QPalette.Background,Qt.darkRed)
47         self.main_pl.setColor(QPalette.Background, Qt.darkYellow)
48         # 設置窗體自動填充背景顏色
49         self.setAutoFillBackground(True)
50         self.setPalette(self.main_pl)
51 
52         self.show()
53         self.lcd = QLCDNumber()
54         # 設置顯示的個數
55         self.lcd.setDigitCount(10)
56         # 設置顯示的模式為十進制的
57         self.lcd.setMode(QLCDNumber.Dec)
58         # 設置顯示的模式為  平面模式
59         self.lcd.setSegmentStyle(QLCDNumber.Flat)
60 
61         # # 獲取本地時間
62         # self.lcd.display(time.strftime("%X", time.localtime()))
63         self.main_layout = QVBoxLayout()
64         # 將顯示的組件添加到盒子布局里面
65         self.main_layout.addWidget(self.lcd)
66         # 設置組件在布局的中間位置
67         self.main_layout.setAlignment(Qt.AlignCenter)
68         # 設置給頂層布局
69         self.setLayout(self.main_layout)
70 
71     def move_center(self):
72         # 拿到主窗口的矩形
73         m_rect = self.frameGeometry()
74         # 獲得整個屏幕的絕對值,從中得到屏幕的中心點
75         w_center_top = QDesktopWidget().availableGeometry().center()
76         m_rect.moveCenter(w_center_top)
77         # 從左向右邊移動,直到屏幕中間的位置
78         self.move(m_rect.topLeft())
79 
80 if __name__ == '__main__':
81     # 創建一個QT應用對象
82     app = QApplication(sys.argv)
83     m_time = MyTime()
84     sys.exit(app.exec_())
85     # app.exex_()
View Code

>>>最后此項目的完整代碼如下:

 1 from PyQt5.QtGui import *  # QtGui:對系統及窗口的操作
 2 from PyQt5.QtCore import *  # QtCore:包含一些核心的應用,例如時間模塊等;
 3 # QDesktopWidget:包含了屏幕的尺寸
 4 from PyQt5.QtWidgets import QWidget,QDesktopWidget,QLCDNumber,QVBoxLayout,QApplication
 5 import sys,time
 6 
 7 
 8 class MyTime(QWidget):
 9     """
10     面向對象的特點:封裝、繼承、多態---(類、方法、數據)
11     __init__是python語言里面的構造方法
12     """
13     def __init__(self):  # self指的是類實例對象的本身(PS:不是類本身)
14         # 用於解決多重繼承的問題
15         super().__init__()
16         self.initUI()
17         self.init_timer()
18     def init_timer(self):
19         # 提供了定時器信號和單出發定時器
20         self.timer = QTimer()
21         # 每間隔1秒就出發一次 timeout信號
22         self.timer.setInterval(1000)
23         self.timer.start()  # 啟動這個定時器
24         self.timer.timeout.connect(self.update_timer)  # 信號和槽函數
25     def update_timer(self):
26         # 獲取本地時間
27         self.lcd.display(time.strftime("%X", time.localtime()))
28 
29 
30 
31     # 繪制UI界面
32     def initUI(self):
33         # 窗口組件大小 250px 150
34         self.resize(250,150)
35         # self.move(300,300)
36         # 窗口標題:
37         self.setWindowTitle("創意小時鍾-香")
38         # 調用
39         self.move_center()
40 
41         # 實例化一個調色板
42         self.main_pl = QPalette()
43         # 設置背景顏色為深黃色
44         # self.main_pl.setColor(QPalette.Background,Qt.darkRed)
45         self.main_pl.setColor(QPalette.Background, Qt.darkYellow)
46         # 設置窗體自動填充背景顏色
47         self.setAutoFillBackground(True)
48         self.setPalette(self.main_pl)
49 
50         # 字體顏色的設置:這里有問題:
51         # self.main_pl = QPalette()
52         # self.main_pl.setColor(QPalette.Normal, QPalette.windowText,Qt.darkBlue)
53         # self.setAutoFillBackground(True)
54         # self.setPalette(self.main_pl)
55 
56         # 顯示布局
57         self.show()
58 
59         self.lcd = QLCDNumber()
60         # 設置顯示的個數
61         self.lcd.setDigitCount(10)
62         # 設置顯示的模式為十進制的
63         self.lcd.setMode(QLCDNumber.Dec)
64         # 設置顯示的模式為  平面模式
65         self.lcd.setSegmentStyle(QLCDNumber.Flat)
66         # 實例化盒子布局
67         self.main_layout = QVBoxLayout()
68         # 將顯示的組件添加到盒子布局里面
69         self.main_layout.addWidget(self.lcd)
70         # 設置組件在布局的中間位置
71         self.main_layout.setAlignment(Qt.AlignCenter)
72         # 設置給頂層布局
73         self.setLayout(self.main_layout)
74 
75     def move_center(self):
76         # 拿到主窗口的矩形
77         m_rect = self.frameGeometry()
78         # 獲得整個屏幕的絕對值,從中得到屏幕的中心點
79         w_center_top = QDesktopWidget().availableGeometry().center()
80         m_rect.moveCenter(w_center_top)
81         # 從左向右邊移動,直到屏幕中間的位置
82         self.move(m_rect.topLeft())
83 if __name__ == '__main__':
84     # 創建一個QT應用對象
85     app = QApplication(sys.argv)
86     m_time = MyTime()
87     sys.exit(app.exec_())
88     # app.exex_()

The end!

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM