python圖形開發GUI庫pyqt5的詳細使用方法及各控制元件的屬性與方法
本文主要列出來python圖形開發GUI庫pyqt5的窗體,控制元件屬性與方法如果你想看看python圖形開發GUI庫pyqt5的基礎使用方法可以檢視我們的另一篇文章 python圖形開發GUI庫pyqt5的基本使用方法詳解
基本框架
import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class Demo(QWidget): def __init__(self): super(Demo,self).__init__() # 設定主介面 # 設定控制元件 # 設定佈局 # 設定訊號 def main(self): # 槽函式 if __name__ == '__main__': app = QApplication(sys.argv) demo = Demo() demo.show() sys.exit(app.exec_())
程式啟動畫面
if __name__ == '__main__': app = QApplication(sys.argv) # 原有 splash = QSplashScreen() splash.setPixmap(QPixmap('images/splash.jpg')) splash.show() splash.showMessage('string',Qt.AlignBottom | Qt.AlignCenter,Qt.white) demo = Demo() # 原有 demo.show() # 原有 splash.finish(demo) sys.exit(app.exec_()) # 原有
一、設定主介面
self.setWindowTitle('title') # 設定窗體名稱
self.setWindowIcon('path') # 設定窗體圖示
self.resize(300,250) # 更改窗體大小
self.size() # 獲取窗體大小
self.width() # 獲取窗體寬度
self.height() # 獲取窗體高度
self.setFixedWidth(int width) # 設定窗體寬度
self.setFixedHeight(int height) # 設定窗體高度
self.setFixedSize(int width,int height) # 設定窗體大小
self.setGeometry(int x,int y,int width,int height) # 設定視窗位置
self.frameGeometry() # 獲取視窗的大小和位置
self.move(int x,int y) # 設定視窗的位置
self.pos() # 獲取視窗左上角座標
self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint) # 禁止最大化按鈕
self.setFixedSize(self.width(),self.height()) # 禁止拉伸視窗大小
二、設定控制元件
1、QMessageBox訊息框
1、基本格式
QMessageBox.information(QWidget,‘Title','Content‘,buttons)
第一個引數填self,表示該資訊框屬於我們這裡的Demo視窗;第二個引數型別為字串,填入的是該資訊框的標題;第三個引數型別也是字串,填入的是資訊框的提示內容;最後個引數為資訊框上要新增的按鈕。多個按鈕之間用 | 來連線,常見的按鈕種類有以下幾種:
QMessageBox.Ok
QMessageBox.Yes
QMessageBox.No
QMessageBox.Close
QMessageBox.Cancel
QMessage.Open
QMessage.Save
2、各種型別的框
型別 | 名稱 |
---|---|
QMessageBox.information | 訊息框 |
QMessageBox.question | 問答框 |
QMessageBox.warning | 警告框 |
QMessageBox.critical | 錯誤框 |
QMessageBox.about | 關於框 |
3、與訊息框進行互動
choice = QMessageBox.question(self,'Title','Content',QMessageBox.Yes | QMessageBox.No) if choice == QMessageBox.Yes: pass elif choice == QMessageBox.No: pass
2、文字編輯框和文字瀏覽框
例項化控制元件
self.text_edit = QTextEdit(self) # 文字編輯框
self.text_browser = QTextBrowser(self) # 文字瀏覽框
設定訊號
控制元件型別 | 訊號 | 描述 |
---|---|---|
QTextEdit | textChanged | 文字發生改變 |
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
QTextEdit | setText(‘Content') | 設定文字 |
QTextEdit | toPlainText() | 獲取文字 |
QTextEdit | setTextColor(color) | 設定文字顏色 |
QTextEdit | setFont(font) | 設定字型 |
3、各種按鈕
QPushButton,QToolButton,QRadioButton和QCheckBox均繼承自QAbstractButton類
例項化控制元件
self.test_button = QPushButton('Test',self) # 例項化按鈕
self.test_button = QPushButton('&Download',self) # 例項化按鈕並設定快捷鍵為Alt+D
self.test_button = QToolButton(self) # 工具按鈕(初始不能傳入文字)
self.on_button = QRadioButton('on',self) # 單選按鈕
self.checkbox1 = QCheckBox('Checkbox 1',self) # 複選框的三種狀態:全選中、半選中和無選中
設定訊號
控制元件型別 | 訊號 | 描述 |
---|---|---|
通用 | Pressed | 當滑鼠指標在按鈕上並按下左鍵時觸發該訊號 |
通用 | Released | 當滑鼠左鍵被釋放時觸發該訊號 |
通用 | Clicked | 當滑鼠左鍵被按下然後釋放時,或者快捷鍵被釋放時觸發該訊號 |
通用 | Toggled | 當按鈕的標記狀態發生改變時觸發該訊號 |
QCheckBox | stateChanged | 複選框狀態發生改變 |
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
通用 | isDown() | 提示按鈕是否已按下 |
通用 | isChecked() | 提示按鈕是否已經標記 |
通用 | isEnable() | 提示按鈕是否可以被使用者點選 |
通用 | isCheckAble() | 提示按鈕是否為可標記的 |
通用 | setAutoRepeat() | 設定按鈕是否在使用者長按時可以自動重複執行 |
通用 | setShortcut(‘Ctrl+D') | 設定按鈕快捷鍵 |
QPushButton | setCheckable(True) | 設定按鈕是否已經被選中,如果設定True,則表示按鈕將保持已點選和釋放狀態 |
QPushButton | toggle() | 在按鈕狀態之間進行切換 |
QPushButton | setIcon(QIcon(‘button.png')) | 設定圖示 |
QPushButton | setEnabled() | 設定按鈕是否可以使用,當設定為False時,按鈕變成不可用狀態,點選它不會發射訊號 |
QPushButton | isChecked() | 判斷按鈕是否為標記狀態,若是則返回True,不是則返回False |
QPushButton | setDefault() | 設定按鈕的預設狀態 |
QPushButton | setText(‘text') | 設定按鈕的顯示文字 |
QPushButton | text() | 返回按鈕的顯示文字 |
QToolButton | setArrowType(引數1) | 設定button上顯示的箭頭型別 |
QToolButton | setToolButtonStyle(引數2) | 設定button文字和圖示顯示的樣式 |
QRadioButton | setChecked(True) | 單選按鈕設為選中狀態 |
QCheckBox | setChecked(True) | 將複選框設為選中或無選中狀態 |
QCheckBox | setCheckState(Qt.Checked) | 選中狀態Qt.Checked,無選中狀態Qt.Unchecked和半選中狀態Qt.PartiallyChecked |
QCheckBox | setTristate(True) | 讓一個複選框擁有三種狀態 |
QCheckBox | setCheckState(Qt.PartiallyChecked) | 讓一個複選框擁有三種狀態 |
QCheckBox | checkState() | 獲取當前複選框的狀態,返回值為int型別,0為無選中狀態,1為半選中狀態,2為選中狀態 |
引數1 | 箭頭屬性 |
---|---|
Qt.NoArrow | 無箭頭 |
Qt.UpArrow | 向上的箭頭 |
Qt.DownArrow | 向下的箭頭 |
Qt.LeftArrow | 向左的箭頭 |
Qt.RightArrow | 向右的箭頭 |
引數2 | 樣式 |
---|---|
Qt.ToolButtonIconOnly | 只顯示圖示 |
Qt.ToolButtonTextOnly | 只顯示文字 |
Qt.ToolButtonTextBesideIcon | 文字在圖示下面 |
Qt.ToolButtonTextUnderIcon | 文字在圖示上面 |
Qt.ToolButtonFollowStyle | 未知… |
4、標籤
例項化控制元件
self.label = QLabel(self)
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
QLabel | setPixmap(QPixmap(‘on.png')) | 給標籤設定圖片 |
QLabel | setAlignment(Qt.AlignCenter) | 設定標籤對齊方式 |
5、單行文字框
例項化控制元件
self.lineedit = QLineEdit(self)
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
QLineEdit | setFont(combobox.currentFont()) | 設定字型 |
QLineEdit | setPlaceholderText() | 設定文字框顯示文字 |
QLineEdit | setMaxLength() | 設定文字框所允許輸入的最大字元數 |
QLineEdit | setReadOnly() | 設定文字為只讀 |
QLineEdit | setText() | 設定文字框的內容 |
QLineEdit | text() | 返回文字框的內容 |
QLineEdit | setDragEnable() | 設定文字框是否接受拖動 |
QLineEdit | selectAll() | 全選 |
QLineEdit | setFocus() | 得到焦點 |
QLineEdit | setAlignment(引數1) | 按固定值方式對齊文字 |
QLineEdit | setEchoMode(引數2) | 設定文字框的顯示格式 |
QLineEdit | setValidator(引數3) | 設定文字框的驗證器(驗證規則),將限制任意可能輸入的文字 |
QLineEdit | setInputMask(引數4) | 設定掩碼 |
引數1 | 功能 |
---|---|
Qt.AlignLeft | 水平方向靠左對齊 |
Qt.AlignRight | 水平方向靠右對齊 |
Qt.AlignCenter | 水平方向居中對齊 |
Qt.AlignJustify | 水平方向調整間距兩端對齊 |
Qt.AlignTop | 垂直方向靠上對齊 |
Qt.AlignBottom | 垂直方向靠下對齊 |
Qt.AlignVCenter | 垂直方向居中對齊 |
引數2 | 功能 |
---|---|
QLineEdit.Normal | 正常顯示所輸入的字元,此為預設選項 |
QLineEdit.NoEcho | 不顯示任何輸入的字元,常用於密碼型別的輸入,且長度保密 |
QLineEdit.Password | 顯示與平臺相關的密碼掩飾字元,而不是實際輸入的字元 |
QLineEdit.PasswordEchoOnEdit | 在編輯時顯示字元,負責顯示密碼型別的輸入 |
引數3 | 功能 |
---|---|
QIntValidator | 限制輸入整數 |
QDoubleValidator | 限制輸入浮點數 |
QRegexpValidator | 檢查輸入是否符合正則表示式 |
引數4 | 功能 |
---|---|
000.000.000.000;_ | ip地址,空白字元是‘_' |
HH:HH:HH:HH:HH:HH; | MAC地址 |
0000-00-00 | 日期,空白字元是空格 |
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# | 許可證號,空白字元是‘_',所有字母都轉換為大寫 |
設定訊號
控制元件型別 | 訊號 | 描述 |
---|---|---|
QLineEdit | selectionChanged | 只要選擇改變了,這個訊號就會發射 |
QLineEdit | textChanged | 當修改文字內容時,這個訊號就會發射 |
QLineEdit | editingFinished | 當編輯文字結束時,這個訊號就會發射 |
6、下拉選擇框和數字調節框
例項化控制元件
self.combobox_1 = QComboBox(self) # 普通下拉框(無內容)
self.combobox_2 = QFontComboBox(self) # 字型下拉框(有字型選擇)
self.spinbox = QSpinBox(self) # 數字調節框(預設範圍0-99)
self.doublespinbox = QDoubleSpinBox(self) # 浮點數字調節框(預設範圍0.00-99.99)
設定訊號
控制元件型別 | 訊號 | 描述 |
---|---|---|
QComboBox | currentIndexChanged | 序號發生變化 |
QComboBox | currentTextChanged | 文字發生變化 |
QSpinBox | valueChanged | 數字發生變化 |
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
QComboBox | addItem(self.choice) | 新增一個選項 |
QComboBox | addItems(self.choice_list) | 新增多個選項 |
QComboBox | currentIndex() | 獲取當前文字序號 |
QComboBox | currentText() | 獲取當前文字 |
QComboBox | currentFont() | 獲取當前字型 |
QDoubleSpinBox | setDecimals(int) | 設定小數位數 |
QSpinBox | setRange(-99,99) | 設定範圍 |
QSpinBox | setSingleStep(1) | 設定步長,即每次點選遞增或遞減多少值 |
QSpinBox | setValue(66) | 設定初始顯示值 |
QSpinBox | value() | 獲取值 |
QSpinBox | setValue(value) | 設定調節框的值 |
7、滑動條和旋鈕
例項化控制元件
self.slider_1 = QSlider(Qt.Horizontal,self) # 水平滑動條
self.slider_2 = QSlider(Qt.Vertical,self) # 垂直滑動條
self.dial = QDial(self) # 旋鈕
設定訊號
控制元件型別 | 訊號 | 描述 |
---|---|---|
QSlider | valueChanged | 數值發生改變 |
QDial | valueChanged | 改變錶盤數值 |
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
QSlider | setRange(0,100) | 設定滑動條的範圍 |
QSlider | setMinimum(0) | 設定最小值 |
QSlider | setMaximum(100) | 設定最大值 |
QSlider | value() | 獲取值 |
QSlider | setValue(value) | 設定值 |
QDial | setFixedSize(100,100) | 固定旋鈕的大小 |
QDial | setRange(0,100) | 設定錶盤數值範圍 |
QDial | setMinimum(0) | 設定最小值 |
QDial | setMaximum(100) | 設定最大值 |
QDial | setNotchesVisible(True) | 顯示刻度 |
8、定時器和進度條
例項化控制元件
控制元件型別 | 訊號 | 描述 |
---|---|---|
QTimer | timeout | timer.start()結束時觸發 |
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
QTimer | isActive() | 判斷定時器是否處於啟用狀態 |
QTimer | start(100) | 啟動計時器持續100毫秒 |
QTimer | stop() | 停止計時器 |
QTimer | setSingleShot(True) | 觸發timeout訊號後只調用一次update_func() |
QProgressBar | setMinimum(0) | 設定最小值 |
QProgressBar | setMaximum(100) | 設定最大值 |
QProgressBar | setRange(0,100) | 設定範圍 |
QProgressBar | setValue(value) | 設定進度條當前值 |
QProgressBar | reset() | 重置進度條的值 |
9、數字顯示屏
例項化控制元件
self.lcd = QLCDNumber(self) # 數字顯示屏
控制元件方法
控制元件型別 | 方法 | 描述 |
---|---|---|
QLCDNumber | setDigitCount(10) | 設定顯示多少位數字 |
QLCDNumber | display(1234567890) | 顯示數字 |
QLCDNumber | setSegmentStyle(引數1) | 設定顯示屏數字樣式 |
QLCDNumber | setSmallDecimalPoint(True) | 設定小數點的顯示方式,若為True,則佔位,若為False,則會單獨佔位 |
QLCDNumber | display(0.123456789) | 顯示數字 |
QLCDNumber | display(‘HELLO') | 顯示字母 |
QLCDNumber | setMode(引數2) | 更改數字顯示方式 |
引數1 | 值 | 描述 |
---|---|---|
QLCDNumber.Outline | 0 | 讓內容浮顯,其顏色同顯示屏背景顏色相同 |
QLCDNumber.Filled | 1 | 讓內容浮顯,顏色同窗口標題顏色相同 |
QLCDNumber.Flat | 2 | 讓內容扁平化顯示,顏色同窗口標題顏色相同 |
引數2 | 值 | 描述 |
---|---|---|
QLCDNumber.Hex | 0 | 十六進位制 |
QLCDNumber.Dec | 1 | 十進位制 |
QLCDNumber.Oct | 2 | 八進位制 |
QLCDNumber.Bin | 3 | 二進位制 |
三、設定佈局
1、例項化佈局
v_layout = QVBoxLayout() # 垂直佈局
h_layout = QHBoxLayout() # 水平佈局
form_layout = QFormLayout() # 表單佈局
grid_layout = QGridLayout() # 網格佈局
2、給佈局新增佔位符|控制元件|佈局
self.label.setAlignment(Qt.AlignCenter) # 設定居中方式
h_layout.addStretch(1) # 設定佔位符
v_layout.addWidget(self.user_label) # 垂直佈局新增控制元件
h_layout.addWidget(self.user_line) # 水平佈局新增控制元件
all_v_layout.addLayout(v_layout) # 垂直佈局新增垂直佈局
all_h_layout.addLayout(h_layout) # 水平佈局新增水平佈局
form_layout.addRow(self.user_label,self.user_line) # 表單佈局新增控制元件
grid_layout.addWidget(self.user_label,1,1) # 網格佈局新增控制元件
grid_layout.addWidget(self.user_label,0) # 預設是1行1列
QGridLayout的addWidget()方法遵循如下語法形式:
addWidget(widget,row,column,rowSpan,columnSpan)
widget就是要新增的控制元件;row為第幾行,0代表第一行;column為第幾列,0代表第一列;rowSpan表示要讓這個控制元件去佔用幾行(預設一行);columnSpan表示要讓這個控制元件去佔用幾列(預設一列)。
3、設為整個視窗的最終佈局方式
self.setLayout(all_h_layout)
四、各種對話方塊
1、顏色對話方塊和字型對話方塊
color = QColorDialog.getColor() # 顏色對話方塊(十六進位制的值會儲存在color變數中) if color.isValid(): # 判斷color是否有效 self.text_edit.setTextColor(color) font,ok = QFontDialog.getFont() # 字型對話方塊 if ok: self.text_edit.setFont(font)
2、輸入對話方塊
方法 | 用法 |
---|---|
getItem() | 從下拉框中獲取選項輸入 |
getInt() | 獲取整型值輸入 |
getDouble() | 獲取浮點型值輸入 |
getText() | 獲取字串輸入 |
getMultiLineText() | 獲取多行字串輸入 |
例項:
content,ok = QInputDialog.getText(self,'title','content')
content,ok = QInputDialog.getInt(self,ok = QInputDialog.getDouble(self,ok = QInputDialog.getMultiLineText(self,'content')
Item,ok = QInputDialog.getItem(self,'content',list,False)
getItem(parent,str,iterable,int,bool)方法需要多設定幾個引數,前三個與getText()相同,第四個引數為要加入的選項內容,第五個引數為最初顯示的選項,最後一個引數是選項內容是否可編輯。
3、檔案對話方塊
path,_ = QFileDialog.getSaveFileName(self,'./','Excel Files (*.xlsx;*.xls);;All Files (*)') # 選擇儲存檔案
path,_ = QFileDialog.getOpenFileName(self,'Excel Files (*.xlsx;*.xls);;All Files (*)') # 選擇檔案
path,_ = QFileDialog.getOpenFileNames(self,'Excel Files (*.xlsx;*.xls);;All Files (*)') # 選擇多個檔案
path,_ = QFileDialog.getExistingDirectory(self,'./') # 選擇資料夾
引數:指定父類,檔案對話方塊的標題,對話方塊開啟時顯示的路徑,副檔名過濾器
其中設定副檔名過濾,用雙分號間隔。
'All Files (*);;PDF Files (*.pdf);;Text Files (*.txt)'
五、介面關閉事件
def closeEvent(self,QCloseEvent): # 關閉事件函式 if not self.saved: # 如果未儲存 choice = QMessageBox.question(self,'','Do you want to save the text?',QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel) if choice == QMessageBox.Yes: # 如果需要繼續儲存 self.saved_func() # 呼叫函式進行儲存 QCloseEvent.accept() # 接受關閉事件 elif choice == QMessageBox.No: # 如果不需要繼續儲存 QCloseEvent.accept() # 接受關閉事件 else: QCloseEvent.ignore() # 忽略關閉事件
更多關於python圖形開發GUI庫pyqt5的使用方法請檢視下面的相關連結