【本實驗內容】
1.GUI、PyQT5介紹
2.實現此次實驗效果
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_()
窗口名字默認左上角,
可以設置的;
>>>此時,時鍾程序沒有在正中心,因此進行繼續編程解決這個問題:
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_()
>>>現在編程里面的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_()
發現,它的背景顏色太單調了,這時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_()
>>>最后此項目的完整代碼如下:
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
**************************************************************************************************