參考書爲: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