最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PyQT6從零開(kāi)始做一個(gè)計(jì)時(shí)器

 更新時(shí)間:2026年04月29日 09:17:57   作者:微小冷  
QT是最流行的跨平臺(tái)GUI,基于C++開(kāi)發(fā),pyQT為其python綁定,兼顧了開(kāi)發(fā)效率和運(yùn)行效率,這篇文章主要為大家詳細(xì)介紹了如何基于PyQT6從零開(kāi)始做一個(gè)計(jì)時(shí)器,感興趣的小伙伴可以了解下

初步

QT是最流行的跨平臺(tái)GUI,基于C++開(kāi)發(fā),pyQT為其python綁定,兼顧了開(kāi)發(fā)效率和運(yùn)行效率,是Python語(yǔ)言首選GUI框架,支持pip安裝

pip install PyQt6

考慮到本系列的主角是PyQT,故后文中如不做特殊說(shuō)明,QT一律指代PyQT。一個(gè)最簡(jiǎn)單的QT界面如下圖所示

代碼如下

import PyQt6.QtWidgets as qt
 
app = qt.QApplication([])
win = qt.QDialog()
win.resize(400,150)
hbox = qt.QHBoxLayout()
btn = qt.QPushButton("點(diǎn)我")
btn.clicked.connect(lambda: qt.QMessageBox.information(
    win, "Msg", "你點(diǎn)了我"))
hbox.addWidget(btn)
win.setLayout(hbox)
win.show() 

從上述代碼可以看到,qt中的函數(shù)均以Q開(kāi)頭,然后緊接著是駝峰命名。這種命名規(guī)則可以有效避開(kāi)其他Python模塊,所以實(shí)際開(kāi)發(fā)時(shí),可直接導(dǎo)入QT組件,后面就不用寫qt.xx了。

【QApplication】用于創(chuàng)建一個(gè)QT應(yīng)用,是所有QT代碼能夠被執(zhí)行的前提。盡管看上去什么也沒(méi)做,但必須將其賦給一個(gè)變量,以確保其能夠在整個(gè)GUI生命周期中保持存活。

有了QApp之后,就可以添加布局元素了,包括

  • 【QDialog】對(duì)話框,也就是我們看到的窗口,通過(guò)resize方法,可以設(shè)置窗口的尺寸;setLayout可以添加布局好的內(nèi)容;show則可彈出窗口。
  • 【QHBoxLayout】水平布局管理器,通過(guò)addWidget方法,可以添加控件。
  • 【QPushButton】按鈕,通過(guò)clicked.connect來(lái)綁定回調(diào)函數(shù)
  • 【QMessageBox】中提供了許多消息框,information為信息框

在實(shí)際開(kāi)發(fā)時(shí),往往將窗口寫成類,并通過(guò)腳本的形式調(diào)用,示例如下

import PyQt6.QtWidgets as qt
import sys

class QT1:
    def __init__(self):
        app = qt.QApplication([])
        self.win = qt.QDialog()
        self.win.resize(400,150)
        hbox = qt.QHBoxLayout()
        btn = qt.QPushButton("點(diǎn)我")
        btn.clicked.connect(self.show_msg)
        hbox.addWidget(btn)
        self.win.setLayout(hbox)
        self.win.show() 
        sys.exit(app.exec())
    
    def show_msg(self):
        qt.QMessageBox.information(self.win, "信息提示", "你點(diǎn)擊了我")


if __name__ == "__main__":
    QT1()

和交互式命令行相比,腳本運(yùn)行QT程序需要在show之后,添加【app.exec()】,以阻塞程序,否則程序會(huì)閃退。

導(dǎo)出ui表單

QT提供了非常便捷的拖動(dòng)式開(kāi)發(fā)工具,只需安裝pyside6即可啟動(dòng)。

pip install pyside6
pyside6-designer

進(jìn)入設(shè)計(jì)器后,在模板欄選擇Main Window,點(diǎn)擊創(chuàng)建,即可進(jìn)入U(xiǎn)I拖拽界面

對(duì)于這個(gè)界面,常年使用C++的同學(xué)肯定會(huì)感到十分親切。Ctrl+S快捷鍵可以保存當(dāng)前項(xiàng)目,其格式為.ui。這個(gè).ui文件是QT的界面表單,對(duì)于C++或者Python都是通用的。

下面設(shè)計(jì)一個(gè)計(jì)時(shí)器,即從左側(cè)的部件盒子中,拉取一個(gè)LCD Number到界面上,用于計(jì)時(shí);再拉取兩個(gè)Push Button作為控制按鈕。雙擊Push Button可以更改按鈕上顯示的文字,兩個(gè)按鈕分別設(shè)為開(kāi)始和停止。

右側(cè)屬性欄中,可以修改部件名稱,LCD數(shù)字屏保留原始的lcdNumber即可;開(kāi)始和停止按鈕分別設(shè)為bnStart和bnStop。

調(diào)用

QT設(shè)計(jì)器的功能僅限于畫界面,在導(dǎo)出.ui之后,剩下的工作還是要交給Python。

剛剛我們保存的界面文件名為main.ui,下面在其同級(jí)路徑下創(chuàng)建python腳本如下

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QMainWindow
import sys

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('main.ui', self)  # 加載UI文件

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec())

運(yùn)行這個(gè)腳本,即可展現(xiàn).ui中的規(guī)劃成果

計(jì)時(shí)器實(shí)現(xiàn)

關(guān)于計(jì)時(shí)器的具體實(shí)現(xiàn)流程,主要就是Python的工作了,其運(yùn)行結(jié)果如下

代碼如下

import time
from threading import Thread

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('main.ui', self)  # 加載UI文件
        self.bnStart.clicked.connect(self.bnStart_click)
        self.bnStop.clicked.connect(self.bnStop_click)

    def timer(self):
        t0 = time.time()
        while self.isRunning:
            dt = time.time() - t0
            self.lcdNumber.display(f"{dt:.3f}")
            time.sleep(0.1)

    def bnStart_click(self):
        self.isRunning = True
        self.lcdNumber.display("0")
        Thread(target = self.timer, daemon=True).start()

    def bnStop_click(self):
        if self.isRunning:
            self.isRunning = False
        else:
            self.lcdNumber.display("0")

【click】為按鈕的點(diǎn)擊動(dòng)作,在QT的對(duì)象體系中,是一種信號(hào),是【pyqtBoundSignal】類的具體實(shí)現(xiàn),而非某個(gè)某種函數(shù)。

【connect】即用于將按鈕的點(diǎn)擊信號(hào)綁定到某個(gè)執(zhí)行函數(shù)上。

在QT的術(shù)語(yǔ)中,connect綁定的執(zhí)行函數(shù)叫做槽(slot),只不過(guò)在pyqt中,不知道slot這個(gè)概念也沒(méi)什么問(wèn)題。

到此這篇關(guān)于基于PyQT6從零開(kāi)始做一個(gè)計(jì)時(shí)器的文章就介紹到這了,更多相關(guān)PyQT6計(jì)時(shí)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

东源县| 山阳县| 福安市| 扎兰屯市| 天峨县| 通道| 台北市| 大港区| 大兴区| 涪陵区| 冕宁县| 民权县| 资中县| 桃江县| 文成县| 宁陕县| 万源市| 安仁县| 宿迁市| 南投县| 珠海市| 清河县| 临泽县| 江门市| 松桃| 申扎县| 黄冈市| 灵川县| 高平市| 汕头市| 科技| 东明县| 惠水县| 马鞍山市| 杨浦区| 九寨沟县| 台北市| 晋江市| 石阡县| 敦煌市| 宁安市|