PyQT5相關(guān)經(jīng)驗(yàn)

背景

近段時(shí)間使用python+pyqt5做了一個(gè)占用應(yīng)用,現(xiàn)總結(jié)下實(shí)現(xiàn)過程中的一些經(jīng)驗(yàn)

環(huán)境搭建

網(wǎng)上針對(duì)pycharm+qt的環(huán)境搭建的教程很多,像這篇

  • 安裝pyqt5、pyqt5-tools;

  • 安裝pycharm

  • 配置QtDesigner——通過Qt語言進(jìn)行UI設(shè)計(jì)(支持拖拽式的UI設(shè)計(jì))


    image.png
  • 配置PyUIC——主要用來將QtDesigner代碼轉(zhuǎn)化成Python代碼


    image.png
  • 配置Pyrcc—— 將圖片、數(shù)據(jù)文件資源打包成py文件


    image.png

經(jīng)驗(yàn)

  • 支持高分辨率

    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
    
  • 添加窗口圖標(biāo)方法

    self.w = QWidget()
    icon = QtGui.QIcon()
    icon.addPixmap(QtGui.QPixmap("./login/title.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
    self.w.setWindowIcon(icon)
    
  • label中添加圖片,并按比例縮放

    self.logoLb.setPixmap(QtGui.QPixmap("./login/1.png").scaled(self.logoLb.width(), self.logoLb.height(),
                                                                QtCore.Qt.AspectRatioMode.KeepAspectRatio,
                                                                QtCore.Qt.TransformationMode.SmoothTransformation))
    
  • 添加圖片的另外一種方法,使用qt designer的添加資源方式添加,會(huì)自動(dòng)在.ui中生成對(duì)應(yīng)的代碼,通過Pyrcc命令之后就可以直接使用了

  • 添加狀態(tài)欄,并在狀態(tài)欄中顯示時(shí)間

    def __init__(self):
        ... ...
        self.statusbar = QtWidgets.QStatusBar()
        self.setStatusBar(self.statusbar)
        self.statusShowTime()
        
    def showCurrentTime(self, timeLabel):
        # 獲取系統(tǒng)當(dāng)前時(shí)間
        time = QtCore.QDateTime.currentDateTime()
        # 設(shè)置系統(tǒng)時(shí)間的顯示格式
        timeDisplay = time.toString('yyyy-MM-dd hh:mm:ss dddd')
        # print(timeDisplay)
        # 狀態(tài)欄顯示
        timeLabel.setText(timeDisplay)
    
    def statusShowTime(self):
        self.timer = QtCore.QTimer()
        self.timeLabel = QtWidgets.QLabel()
        font = QtGui.QFont()
        font.setFamily("微軟雅黑")
        font.setPointSize(14)
        font.setBold(True)
        self.timeLabel.setFont(font)
        self.timeLabel.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.timeLabel.setStyleSheet('color: white;')
        self.statusbar.addPermanentWidget(self.timeLabel, 0)
        self.timer.timeout.connect(lambda: self.showCurrentTime(self.timeLabel))  # 這個(gè)通過調(diào)用槽函數(shù)來刷新時(shí)間
        self.timer.start(1000)  # 每隔一秒刷新一次,這里設(shè)置為1000ms  即1s
    
  • tablewidget的標(biāo)題大小設(shè)置

    # 第一個(gè)參數(shù)是標(biāo)題對(duì)應(yīng)的位置(從0開始),第二個(gè)參數(shù)是設(shè)置的寬度
    self.tableWidget.horizontalHeader().resizeSection(0, 100)
    
  • tablewidget單元格一開始是None,只有在添加數(shù)據(jù)的時(shí)候創(chuàng)建QTableWidgetItem項(xiàng)添加到對(duì)應(yīng)單元格

  • QT Designer設(shè)計(jì)界面時(shí),子控件會(huì)繼承父控件的格式設(shè)置,如果不想要繼承,則需要在父控件或者祖先控件的QSS中指定對(duì)應(yīng)的控件objname(可以同時(shí)指定多個(gè)),如下
    只對(duì)tabwidget中每個(gè)tab使用背景圖,而tab下的子控件,像label、button等不使用背景圖

    #tabWidget, #tab,#tab_2, #tab_3, #tab_4, #tab_5, #tab_6, #tab_7, #tab_8, #tab_9 {
        border-image: url(:/login/login.png);
    }
    

    參考博客

持續(xù)更新中。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容