1. 程式人生 > 程式設計 >python圖形開發GUI庫pyqt5的詳細使用方法及各控制元件的屬性與方法

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的使用方法請檢視下面的相關連結