PyQt5系列教程(20):液晶顯示屏

上期我們介紹了微調框(QDoubleSpinBox),這期我們介紹一下PyQt中的液晶顯示屏(QLCDNumber)。

總體介紹

QLCDNumber小部件顯示一個類似LCD的數字。

它可以顯示任何大小的數字。它可以顯示十進位,十六進位,八進位或二進位數字。使用display()槽連接數據源很容易,該槽被重載以獲取五種參數類型中的任何一種。

還有一些槽函數可以用setMode()改變基數,用setSmallDecimalPoint()來改變小數點。

當QLCDNumber被要求顯示超出範圍的東西時,會發出overflow()信號。範圍由setDigitCount()設置,但setSmallDecimalPoint()也影響它。如果顯示設置為十六進位,八進位或二進位,則顯示該值的整數等效值。

這些數字和其他符號可以顯示:0/O,1,2,3,4,5/S,6,7,8,9/g,減號,小數點,A,B,C,D,E, F,h,H,L,o,P,r,u,U,Y,冒號,度數符號(在字元串中單引號)和空格。 QLCDNumber將非法字元替換為空格。

一些常用方法

更多的介紹請見官網:QLCDNumber Class

QLCDNumber的小例子

先來看看具體例子的效果吧。

部分核心代碼如下:

class Example(QWidget):nn def initUI(self):nn self.resize(370,190)n self.setWindowTitle(關注微信公眾號:學點編程吧--倒計時:LCD數字)nn self.lcd = QLCDNumber(self)n lb = QLabel("距離2022年北京-張家口冬季奧林匹克運動會還有",self)nn self.lcd.setDigitCount(12)n self.lcd.setMode(QLCDNumber.Dec)n self.lcd.setStyleSheet("border: 2px solid black; color: red; background: silver;")nn time = QTimer(self)n time.setInterval(1000)n time.timeout.connect(self.refresh)n time.start()nn self.show()nn def refresh(self):n startDate = QDateTime.currentMSecsSinceEpoch()n endDate = QDateTime(QDate(2020, 2, 4), QTime(0, 0, 0)).toMSecsSinceEpoch()n interval = endDate - startDaten if interval > 0:n days = interval // (24 * 60 * 60 * 1000)n hour = (interval - days * 24 * 60 * 60 * 1000) // (60 * 60 * 1000)n min = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000) // (60 * 1000)n sec = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000) // 1000n intervals = str(days) + : + str(hour) + : + str(min) + : + str(sec)n self.lcd.display(intervals)n

代碼總體不複雜,唯一需要注意的地方就是下面倒計時的計算,當然我的方法不一定最好,如果你有更好的歡迎交流。

self.lcd = QLCDNumber(self)nself.lcd.setDigitCount(12)nself.lcd.setMode(QLCDNumber.Dec)nself.lcd.setStyleSheet("border: 2px solid black; color: red; background: silver;")n

  • 新建一個QLCDNumber對象。
  • 將新建的QLCDNumber對象設置為12位。
  • setMode()該屬性保存當前的顯示模式(數字型檔),對應於當前顯示模式,即二進位、八進位、十進位(默認)和十六進位中的一種。十進位模式可以顯示浮點值,其他模式顯示整數等值。
  • setStyleSheet()設置LCD的外觀,樣式介紹如下:

time = QTimer(self)ntime.setInterval(1000)n

QTimer類提供重複性和單次定時器。QTimer類為定時器提供高級編程介面。要使用它,請創建一個QTimer,將其timeout()信號連接到相應的插槽,然後調用start()。從此以後,它將以固定的時間間隔發出timeout()信號。

setInterval()該屬性擁有以毫秒為單位的超時時間間隔。此屬性的默認值為0。

def refresh(self):n startDate = QDateTime.currentMSecsSinceEpoch()n endDate = QDateTime(QDate(2020, 2, 4), QTime(0, 0, 0)).toMSecsSinceEpoch()n interval = endDate - startDaten if interval > 0:n days = interval // (24 * 60 * 60 * 1000)n hour = (interval - days * 24 * 60 * 60 * 1000) // (60 * 60 * 1000)n min = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000) // (60 * 1000)n sec = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000) // 1000n intervals = str(days) + : + str(hour) + : + str(min) + : + str(sec)n self.lcd.display(intervals)n

因為我們設置的超時間隔是1000ms(1秒),所以每隔1秒我們就會調用refresh()這個槽函數。在這個槽函數中我們要不斷的進行倒計時的計算。

QDateTime類提供日期和時間函數。QDateTime對象包含日曆日期和時鐘時間(「日期時間」)。它是QDate和QTime類的組合。它可以從系統時鐘讀取當前的日期時間。

  1. 首先我們計算當前時間,這裡我們使用了currentMSecsSinceEpoch()將其轉換成當前時間到1970-01-01T00:00:00世界協調時間以來的毫秒數。
  2. 其次因為冬季奧運會的時間是2020年2月4日開始,我們假設是0:0:0開始的,我們創建一個QDatetime對象,並使用toMSecsSinceEpoch()返回2020年2月4日0:0:0自1970-01-01T00:00:00.000世界協調時間以來的毫秒數。
  3. 再次我們將上面的結果進行相減,得到了當前時間到冬季奧運會開幕時的時間間隔。
  4. 最後我們進行了一些列的計算,得到天數、小時數、分鐘數、秒數並顯示在LCD上。

最後

ok,今天的介紹暫時就到這裡吧,本周有事所以發得有點遲了。如果你喜歡本篇文章,請給我點贊、讚賞(推薦『(*^﹏^*)′),分享給你的好友們吧!

如果你想要本次教程中的相關源碼,請關注微信公眾號:學點編程吧,發送pyqt520,會自動得到相應的百度網盤下載鏈接。


推薦閱讀:

python動態的網頁數據json里沒有中文字元怎麼辦?
就目前就業形勢和今後發展 PHP和Python作為後台開發語言哪一個更合適?
關於matplotlib,你要的餅圖在這裡
python與numpy使用的一些小tips(4)

TAG:PyQt | Python | Python教程 |