PyQt5学习例子整理
基本框架
# PyQt5引入的組件其實只需要QtWidgets、QApplication就可以實現最基本的窗體顯示 # 還需要引入sys作為窗體應用進程的控制 from PyQt5.QtWidgets import QApplication,QWidget,QHBoxLayout,QLineEdit,QPushButton import sysclass TemplateForm(QWidget):def __init__(self):super().__init__()hlayout=QHBoxLayout()self.setLayout(hlayout)lineEdit=QLineEdit()lineEdit.setText('Hello,world!')button=QPushButton()button.setText('Please press me!')button.clicked.connect(self.close)hlayout.addWidget(lineEdit,1)hlayout.addWidget(button,2)# Press the green button in the gutter to run the script. if __name__ == '__main__':app=QApplication(sys.argv)form=TemplateForm()form.show()app.exit(app.exec_())基本組件使用
- QMainWindow
- QWidget
在隱藏窗體邊框后鼠標不能拖動窗體,需要重寫鼠標事件,首先為窗體設置一個變量m_Drag判斷鼠標左鍵是否按下。
# 在窗體類里定義m_Drag def __init__(self):super().__init__()self.m_Drag=False# 重寫鼠標事件 """重寫隱藏邊框后的鼠標事件,因為隱藏邊框后不能移動窗體""" def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.m_Drag = True# event.globalPos()是鼠標當前點擊位置相對于電腦桌面左上角的坐標# self.pos()是當前窗體相對于電腦桌面左上角的坐標self.m_DragPosition = event.globalPos() - self.pos()# 將拖動時鼠標的光標形狀變成小手self.setCursor(QCursor(Qt.OpenHandCursor))def mouseMoveEvent(self, event):# 只有單擊鼠標左鍵才能移動if Qt.LeftButton and self.m_Drag:# move(QPoint()),是將窗體移動到某一點self.move(event.globalPos() - self.m_DragPosition)def mouseReleaseEvent(self, event):self.m_Drag = Falseself.setCursor(QCursor(Qt.ArrowCursor))- QPushButton
按鍵用得最多的就是“單擊事件”:
然后就是對QPushButton的QSS裝飾(QSS代碼):
/*QPushButton的正常樣式*/ QPushButton{width:100px;height:25px;background-color:#FFFFFF;/*設置圓角*/border:1px solid #00CCCC;border-radius:5px;color:#000000; } # 當鼠標懸浮在QPushButton時的樣式 QPushButton:hover{background-color:#00CCFF;color:#888888; } # 單擊QPushButton時的樣式 QPushButton:pressed{background-color:red;color:black; }第二就是如何使用QPushButton控件做一個圓形的logo,主要還是qss的修飾:
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QHBoxLayout,QGraphicsDropShadowEffect from PyQt5.Qt import Qt # 使用Qt里的顏色 import sysqssStyleSheet='''QPushButton {/*限制最小最大尺寸*/min-width: 96px;max-width: 96px;min-height: 96px;max-height: 96px;border-radius: 48px; /*圓形*/border:none;background:white;/* 設置按鈕的背景圖片 */border-image:url(./backgroundimg2.png);} '''class MyLogoButtonForm(QWidget):def __init__(self):super(MyLogoButtonForm, self).__init__()self.myButton=QPushButton()hlayout=QHBoxLayout()hlayout.addWidget(self.myButton)self.setLayout(hlayout)# 為按鈕周邊設置陰影logoShadow=QGraphicsDropShadowEffect(self) # 這里的self是當前按鈕的父控件,不一定是selflogoShadow.setBlurRadius(8)logoShadow.setOffset(0,0)logoShadow.setColor(Qt.gray)self.myButton.setGraphicsEffect(logoShadow)self.setStyleSheet(qssStyleSheet)if __name__ == '__main__':app=QApplication(sys.argv)myform=MyLogoButtonForm()myform.show()sys.exit(app.exec_())
第三是將按鍵設置成那種帶小圖標的樣式:
然后按照慣例修飾一下按鈕(QSS代碼)
QPushButton#searchpushButton{ width:60px; height:25px; background-color:#FFFFFF; border:1px solid #00CCCC; border-radius:5px; color:#000000; } QPushButton#searchpushButton:hover{background-color:#00CCFF;color:#888888; }- QLineEdit
單行文本輸入框我只使用了其獲取文本的功能/設置提示文本功能/設置掩碼(密碼輸入)功能,至于還有什么騷操作有待探索。
- QProgressBar—進度條
進度條的使用是動態的,進度值是在后臺不斷變化的,這就需要我們在使用時進度條時引入線程,不然界面在進度條動態變化時可能會“假死”。
首先,來看如何創建進度條:
這樣的進度條是不會動的,要使進度條的進度值顯示動態變化,引入線程:
為了實現目的,我們需要增加三樣東西:
1.線程ProgressBarThread,其中使用了Qt的signal-slot機制,在線程中改變進度條的值,再用信號signal綁定回調函數slot,使用信號將進度條的進度值傳遞給回調函數(通知)。
2.回調函數setProgressBarValue_CallBack,接收信號傳遞來的進度值,然后更新進度條顯示的進度值。
3.控制函數setProgressBarValue,創建線程對象、將線程中的信號signal和回調函數slot綁定起來、啟動線程。
第三是來看看進度條如何美化(QSS代碼):
qssStyleSheet='''/* 設置進度條的三種樣式 */#RedProgressBar {/* 進度值居中 */text-align:center;}#RedProgressBar::chunk {/* 設置進度條里進度值顯示的柵欄格子樣式 */background-color:#F44336;}#GreenProgressBar {min-height: 12px;max-height: 12px;border-radius: 6px;}#GreenProgressBar::chunk {/* 設置進度條里進度值顯示的柵欄格子樣式 */background-color:#009688;border-radius: 6px;}#BlueProgressBar {text-align:center;/* 設置進度條邊框及其顏色 */border: 2px solid #00CCCC;/* 設置圓角 */border-radius: 5px;background-color:#FFFFFF;}#BlueProgressBar::chunk {/* 設置進度條里進度值顯示的柵欄格子樣式 */background-color:#00CCCC;width: 5px;margin: 0.5px;} '''- QThread—Qt線程
在進度條使用例子里,就是我第一次接觸QThread,主要思路就是創建一個自己的類繼承QThread,然后自定義線程類的run函數即可。
- QTableWidget—QT表格控件
QTableWidget主要包括:
水平表頭、垂直表頭
表格行、列
單元格
如何使用表格,主要包括:
先看modifierTableWidget里如何設置表格
再看如何往表格里添加內容,包括添加文本、添加控件
然后是如何刪除表格的內容、如何清空表格內容
最后是如何美化表格(qss)
- QDateEdit/QDateTimeEdit
結語
好了,懶懶的自己將畢設的東西慢慢整理出來,走出校園,走進職場,只能慢慢努力了,做一個熱愛編程的人。
—偷得浮生半日閑,又摘桃花換酒錢!
總結
以上是生活随笔為你收集整理的PyQt5学习例子整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智慧警务——大数据时代的警务模式
- 下一篇: MPV Player神级播放器