PyQt5----學習記錄

參考書爲:PyQt5快速開發與實戰

一、環境搭建

       基本上參考書本不會有大問題,需要注意的是:

       (1)儘量使用PIP安裝,方便簡潔。

       (2)Python安裝路徑,將會是你使用PIP安裝PyQt時的路徑。所以如果不想將這些東西

           安裝到C盤下,那麼你應該講Python安裝在你想要的路徑。

       (3)安裝完書本的一堆東西后,需要設置Eric6。書本上所說的PyQt5的Tools的路徑並不對,正確應改爲如下:

           

我Python安裝在C盤根目錄下。

 

二、PyQt5的使用

       (1)設置控件的夥伴關係(buddy)

           這個可用來使標籤(Label)綁定控件,書本講得不清楚。設置夥伴關係,標籤裏面的英文字符,可以被快捷鍵綁定。

           比方說有個標籤名爲“test”,還有個spinbox控件,設置它們之間爲夥伴關係(將label拉向spinbox),並在label的text

           屬性中改爲"te&st"。

           

           然後保存,Ctrl + R 開始預覽界面,這時候如果Alt + x ,我們發現spinbox被選中了。這就是夥伴關係的運用。

           同理,label的text屬性改爲“t&ext”,那麼此時需要Alt + e才能選中spinbox了。

    

      (2)界面與邏輯分離

          具體操作如下:

          1、創建新項目:

               eric6->project->new

          2、生成一個簡單界面,這裏只有一個button與checkbox,並且編譯成py文件:

               

               

               

               代碼如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\PyQt5\mainwin.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(260, 130, 131, 51))
        self.pushButton.setObjectName("pushButton")
        self.checkBox = QtWidgets.QCheckBox(self.centralWidget)
        self.checkBox.setGeometry(QtCore.QRect(280, 260, 71, 16))
        self.checkBox.setObjectName("checkBox")
        MainWindow.setCentralWidget(self.centralWidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.checkBox.setText(_translate("MainWindow", "CheckBox"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

            3、創建邏輯文件,並編寫代碼:

               File->new->save

               我創建了一個名爲:“callmainwin”的py文件:代碼如下:

import sys
from PyQt5.QtWidgets import QApplication,QMainWindow
import Ui_mainwin   #這裏是將生成的文件UI_mainwin.py  include到本模塊
                    #也可以直接from Ui_mainwin import Ui_MainWindow
                    #直接將界面的類Ui_MainWindow添加進來

#Ui_mainwin.Ui_MainWindow指的是Ui_mainwin.py裏面界面的類Ui_MainWindow
class MainCode(QMainWindow,Ui_mainwin.Ui_MainWindow):
      def __init__(self):
            QMainWindow.__init__(self)
            Ui_mainwin.Ui_MainWindow.__init__(self)  #初始化界面
            self.setupUi(self)
            self.pushButton.clicked.connect(self.bt_setcheckbox) #設置信號與對應槽函數

      #當Ui_MainWindow按鍵觸發點擊信號時,觸發此函數將checkbox狀態改變
      def bt_setcheckbox(self):
           if self.checkBox.checkState() == True:
                self.checkBox.setCheckState(False)
           else:
              self.checkBox.setCheckState(True) 
        
        
if __name__=='__main__':
	app=QApplication(sys.argv)
	md=MainCode()
	md.show()
	sys.exit(app.exec_())

           最後,F2運行“callmainwin.py”腳本,點擊按鍵可以觸發checkbox的狀態改變

      (3)界面與邏輯分離(方法二)

          也可以利用eric6生成“Dialog Code”的方法實現:

          步驟1、2相同,就是創建一個界面並且轉化爲py代碼,第3步有所不同

          3、生成對話框代碼:

          

               然後,點擊“new”輸入生成的py文件名字以及生成的類的名稱,並且選擇對應控件發出的信號:

          

              確認後eric6會生成對應的py文件

          4、修改生成的py文件

                主要是添加槽函數對應的處理代碼,以及設置本模塊運行時,一些系統調用的類,修改後代碼:

# -*- coding: utf-8 -*-

import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow, QApplication
from Ui_mainwin import Ui_MainWindow


class callmw(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):

        super(callmw, self).__init__(parent)
        self.setupUi(self)
    
    #這個是槽裝飾器,button發送的點擊信號所攜帶的參數
    #會作爲pyqtSlot()的參數被帶進來,這裏的點擊信號不帶參數
    @pyqtSlot()     
    def on_pushButton_released(self):
        if self.checkBox.checkState() == True:
           self.checkBox.setCheckState(False)
        else:
           self.checkBox.setCheckState(True)
        

if __name__=='__main__':
	app=QApplication(sys.argv)
	md=callmw()
	md.show()
	sys.exit(app.exec_())

      (3)super函數的使用

          這個函數主要是用來使用繼承的父類的同名方法的。參考:https://www.cnblogs.com/silencestorm/p/8404046.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章