日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

qtextedit 默认文案_QT中常用的控件说明.md

發布時間:2024/9/30 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qtextedit 默认文案_QT中常用的控件说明.md 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2主窗口類型

有三種窗口

QMainWindow

QWiget

QDialog

QMainWindow:可以包含菜單欄,工具欄和標題欄,是

最常見的窗口顯示形式。

QDialog:是對話窗口的基類。沒有菜單欄,工具欄,狀態欄

QWiget:不確定窗口的用途,就用QWidget。

## QT中常用的控價

### 1、Qlabel控件

setAlignment() 設置文本的對齊方式

setIndent() 設置文本的縮進

text() 獲取文本

setBuddy() 設置伙伴關系

setText() 設置文本內容

selectedText() 返回所選擇的字符

setWordWrap() 設置是否運行換行

#### QLabel常用的信號

1.當鼠標劃過Qlabel控件時觸發:linkHovered

2.當鼠標單擊Qlabel控件時觸發:linkActivated

| 方法 | 解釋 |

| ------------- | ------------------------------- |

| clear() | 清空剪貼板內容 |

| mimeData() | 獲取剪貼板上的MIME類型數據 |

| setMimeData() | 將MIME類型數據放到剪貼板中 |

| pixmap() | 獲取剪貼板上的QPixmap類型的數據 |

| setPixmap() | 將QPixmap類型數據放到剪貼板中 |

| image() | 獲取剪貼板上QImage類型的數據 |

| setImage() | 將QImage類型數據放到剪貼板中 |

| text() | 獲取剪貼板上的文本 |

| setText() | 將文本放到剪貼板中 |

#### QLabel與伙伴控件

### 2、Edit控件

#### QLineEdit

基本功能:輸入單行的文本

##### EchoMode(回顯模式)

4種回顯模式

1、Normal

2、NoEcho

3、Password

4、PasswordEchoOnEdit

##### 方法:

+ setPlaceholderText():在line沒有輸入的時候給出提示信息

##### QLineEdit控件的輸入(校驗器)

如限制只能輸入整數,浮點數或者滿足一定條件的字符串

##### 用掩碼限制QLineEdit控件的輸入

```pyth

用掩碼限制QLineEdit控件的輸入

A ASCII字母字符是必須輸入的(A-Z、a-z)

a ASCII字母字符是允許輸入的,但不是必需的(A-Z、a-z)

N ASCII字母字符是必須輸入的(A-Z、a-z、0-9)

n ASII字母字符是允許輸入的,但不是必需的(A-Z、a-z、0-9)

X 任何字符都是必須輸入的

x 任何字符都是允許輸入的,但不是必需的

9 ASCII數字字符是必須輸入的(0-9)

0 ASCII數字字符是允許輸入的,但不是必需的(0-9)

D ASCII數字字符是必須輸入的(1-9)

d ASCII數字字符是允許輸入的,但不是必需的(1-9)

# ASCI數字字符或加減符號是允許輸入的,但不是必需的

H 十六進制格式字符是必須輸入的(A-F、a-f、0-9)

h 十六進制格式字符是允許輸入的,但不是必需的(A-F、a-f、0-9)

B 二進制格式字符是必須輸入的(0,1)

b 二進制格式字符是允許輸入的,但不是必需的(0,1)

> 所有的字母字符都大寫

< 所有的字母字符都小寫

! 關閉大小寫轉換

\ 使用"\"轉義上面列出的字符

```

##### QLineEdit綜合案例

#### QTextEdit控件

QLineEdit控件只支持單行輸入,QTextEdit支持多行輸入

##### 常用的方法:

1.setPlainText() #設置文本

2.setHtml() #設置html格式

3.toPlainText() #獲取文本

4.toHtml

5.setFont() 設置文本框顯示的字體,參數是Font類型

```python

#設置字體的多選框和設置字體的Line的

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QFontComboBox, QLineEdit, QMessageBox, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.combobox_2 = QFontComboBox(self) # 2

self.lineedit = QLineEdit(self) # 3

self.v_layout = QVBoxLayout()

self.layout_init()

self.combobox_init()

def layout_init(self):

self.v_layout.addWidget(self.combobox_2)

self.v_layout.addWidget(self.lineedit)

self.setLayout(self.v_layout)

def combobox_init(self):

self.combobox_2.currentFontChanged.connect(lambda: self.on_combobox_func(self.combobox_2))

def on_combobox_func(self, combobox): # 8

self.lineedit.setFont(combobox.currentFont())

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

##### 事件:

+ textChanged 當文本框的文本內容發生變化時自動觸發信號

#### QTextBrowser控件

QTextEdit和QTextBrowser控件類似,但是一般QTextEdit是用來編輯文本的,而QTextBroser是用來顯示文本的

### 4、按鍵控件

1.QPushButton

事件:

+ toggled 標記

配合isChecked()函數使用,如果按鍵是已經標記則打印True,否則打印False。

+ clicked 點擊

+ pressed 按下

+ released 松開

方法:

+ setCheckable(True) 設置一個按鍵為一個可以標記的按鍵,該按鍵就會有兩種狀態,標記和非標記的狀態

+ setIcon() 為按鍵設置一個圖片,傳入的參數是QIcon的格式

+ isChecked() 查看按鍵的狀態,如果是標記狀態則是True,否標記狀態False

```python

import sys

from PyQt5.QtGui import QIcon

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.test_button = QPushButton('Test', self)

self.test_button.setCheckable(True) #設置按鍵為一個可標記的按鍵

self.test_button.setIcon(QIcon('images/save_as.ico')) #為按鍵設置圖片

self.test_button.toggled.connect(self.button_state_func) #為按鍵綁定事件

def button_state_func(self):

print(self.test_button.isChecked()) # 4

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

2.QToolButton

?注意:QToolButton實例化的時候不能直接傳入文本字符串,因為該控件沒有相應的初始化函數,也就是說這樣是錯誤的:self.test_button = QToolButton("test",self),如果要設置文本的話,的通過setText()的方法。但是如果同時使用setText()和setIcon()方法的話,只會顯示圖標。

```python

import sys

from PyQt5.QtGui import QIcon

from PyQt5.QtWidgets import QApplication, QWidget, QToolButton

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.test_button = QToolButton(self) # 1

self.test_button.setCheckable(True)

self.test_button.setIcon(QIcon('images/save_as.ico'))

self.test_button.toggled.connect(self.button_state_func)

self.test_button.isCheckable()

def button_state_func(self):

print(self.test_button.isChecked())

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

3.QRadioButton

一個布局中只能又一個單選框被選中

方法toggled相當于選中和取消選中。現在QPushButton的toggle的方法類似,按下不會彈起

+ setChecked(True) 單選框設置為選中。

+ setChecke() 獲取是否選中的狀態

+ setCheckState() 傳入參數Qt.Checked為選中狀態,Qt.Unchecked為無選中的狀態,Qt.PartiallyChecked為半選中的狀態。

+ text() 獲取文本

+ stateChanged 在復選框的狀態發生改變的時候觸發

```python

import sys

from PyQt5.QtGui import QPixmap

from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QLabel, QHBoxLayout, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.off_button = QRadioButton('off', self) # 1

self.on_button = QRadioButton('on', self) # 2

self.pic_label = QLabel(self) # 3

self.button_h_layout = QHBoxLayout()

self.pic_h_layout = QHBoxLayout()

self.all_v_layout = QVBoxLayout()

self.layout_init()

self.radiobutton_init()

self.label_init()

def layout_init(self):

self.pic_h_layout.addStretch(1) #在未加入標簽之前先加入一個占位符

self.pic_h_layout.addWidget(self.pic_label)

self.pic_h_layout.addStretch(1) #在加入標簽之后加入一個占位符,作用是拉伸窗口的時候,label會自動適用窗口的大小

self.button_h_layout.addWidget(self.off_button)

self.button_h_layout.addWidget(self.on_button)

self.all_v_layout.addLayout(self.pic_h_layout)

self.all_v_layout.addLayout(self.button_h_layout)

self.setLayout(self.all_v_layout)

def radiobutton_init(self):

self.off_button.setChecked(True) #設置為選中的狀態

self.off_button.toggled.connect(self.on_off_bulb_func) # 6

# self.on_button.toggled.connect(self.on_off_bulb_func)

def label_init(self):

self.pic_label.setPixmap(QPixmap('images/off.png')) # 7

def on_off_bulb_func(self): # 8

if self.off_button.isChecked():

self.pic_label.setPixmap(QPixmap('images/off.png'))

else:

self.pic_label.setPixmap(QPixmap('images/on.png'))

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

4.QCheckBox

三種狀態:

1、沒選中0

2、半選中1

3、選中2

復選框一共有三種狀態:全選中、半選中和無選中。若一個父選項的子選項全部為選中狀態,則該父選項為全選中;若子選項全部為無選中狀態,則該父選項為無選中狀態;若子選項既有全選中和無選中狀態,則該父選項為半選中狀態。

事件:

?stateChanged 是狀態變化時觸發信號

方法:

?checkState() 查看選中的狀態:0、1、2

?setchecked(True) 設置選擇狀態,只有選中和未選中

?setcheckState() 設置選擇的狀態,Qt.Checked為選中的狀態,Qt.Unchecked未選中狀態和

?Qt.PartiallyChecked為半選中的狀態。

```py

import sys

from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.checkbox1 = QCheckBox('Checkbox 1', self)

self.checkbox2 = QCheckBox('Checkbox 2', self)

self.checkbox3 = QCheckBox('Checkbox 3', self)

self.v_layout = QVBoxLayout()

self.checkbox_init()

self.layout_init()

def layout_init(self):

self.v_layout.addWidget(self.checkbox1)

self.v_layout.addWidget(self.checkbox2)

self.v_layout.addWidget(self.checkbox3)

self.setLayout(self.v_layout)

def checkbox_init(self):

# self.checkbox1.setChecked(True) # 1

self.checkbox1.setCheckState(Qt.Checked) # 2

self.checkbox1.stateChanged.connect(lambda: self.on_state_change_func(self.checkbox1)) # 3

# self.checkbox2.setChecked(False)

self.checkbox2.setCheckState(Qt.Unchecked)

self.checkbox2.stateChanged.connect(lambda: self.on_state_change_func(self.checkbox2))

# self.checkbox3.setTristate(True) # 4

self.checkbox3.setCheckState(Qt.PartiallyChecked) # 5

self.checkbox3.stateChanged.connect(lambda: self.on_state_change_func(self.checkbox3))

def on_state_change_func(self, checkbox): # 6

print('{} was clicked, and its current state is {}'.format(checkbox.text(), checkbox.checkState()))

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

父類都是QAbstractButton

### 5、下拉列表控件QComboBox

```python

from PyQt5.QtWidgets import QCombobox

choice = "a"

choice_list = ["a","b","c"]

self.combobox_1 = QCombobox(self)

self.combobox_1.addItem(choice) #選擇下拉框中的一項

self.combobox_1.addItems(choice_list) #選擇下拉框的下拉列表

```

+ currentIndexChanged 當下拉框的選項發生變化時,會觸發這個方法。

+ currentTextChanged 當下拉框的文本發生變化時,會觸發這個方法。

+ currentIndex() 獲取下拉框當前的序號

+ currentText() 獲取當前的文本值

```python

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QFontComboBox, QLineEdit, QMessageBox, QVBoxLayout

class Demo(QWidget):

choice = 'a'

choice_list = ['b', 'c', 'd', 'e']

def __init__(self):

super(Demo, self).__init__()

self.combobox_1 = QComboBox(self) # 1

self.combobox_2 = QFontComboBox(self) # 2

self.lineedit = QLineEdit(self) # 3

self.v_layout = QVBoxLayout()

self.layout_init()

self.combobox_init()

def layout_init(self):

self.v_layout.addWidget(self.combobox_1)

self.v_layout.addWidget(self.combobox_2)

self.v_layout.addWidget(self.lineedit)

self.setLayout(self.v_layout)

def combobox_init(self):

self.combobox_1.addItem(self.choice) # 4

self.combobox_1.addItems(self.choice_list) # 5

self.combobox_1.currentIndexChanged.connect(lambda: self.on_combobox_func(self.combobox_1)) # 6

# self.combobox_1.currentTextChanged.connect(lambda: self.on_combobox_func(self.combobox_1)) # 7

self.combobox_2.currentFontChanged.connect(lambda: self.on_combobox_func(self.combobox_2))

# self.combobox_2.currentFontChanged.connect(lambda: self.on_combobox_func(self.combobox_2))

def on_combobox_func(self, combobox): # 8

if combobox == self.combobox_1:

QMessageBox.information(self, 'ComboBox 1',

'{}: {}'.format(combobox.currentIndex(), combobox.currentText()))

else:

self.lineedit.setFont(combobox.currentFont())

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 6、滑塊控件

#### QSlider

```python

#水平滑條

from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import QSlider

self.slider_1 = QSlider(Qt.Horizontal,self)

self.slider_1.setRanger(0,100)

#垂直滑塊

self.slider_2 = QSlider(Qt.Vertical,self)

self.slider_2.setMinmum(0)

self.slider_2.setMaxmum(100)

```

valueChanged 滑塊的值發生變化的時候觸發此方法

```python

import sys

from PyQt5.QtCore import Qt

from PyQt5.QtGui import QFont

from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QLabel, QVBoxLayout, QHBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.slider_1 = QSlider(Qt.Horizontal) # 水平滑塊

self.slider_1.setRange(0, 100) #設置滑塊滑動的范圍

self.slider_1.valueChanged.connect(lambda: self.on_change_func(self.slider_1)) # 3

self.slider_2 = QSlider(Qt.Vertical) #豎直的滑塊

self.slider_2.setMinimum(0) # 4

self.slider_2.setMaximum(100) # 5

self.slider_2.valueChanged.connect(lambda: self.on_change_func(self.slider_2))

self.label = QLabel('0', self) # 6

self.label.setFont(QFont('Arial Black', 20))

self.h_layout = QHBoxLayout()

self.v_layout = QVBoxLayout()

self.h_layout.addWidget(self.slider_2)

self.h_layout.addStretch(1)

self.h_layout.addWidget(self.label)

self.h_layout.addStretch(1)

self.v_layout.addWidget(self.slider_1)

self.v_layout.addLayout(self.h_layout)

self.setLayout(self.v_layout)

def on_change_func(self, slider): # 7

if slider == self.slider_1:

self.slider_2.setValue(self.slider_1.value())

self.label.setText(str(self.slider_1.value()))

else:

self.slider_1.setValue(self.slider_2.value())

self.label.setText(str(self.slider_2.value()))

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

#### QDial

```python

#球形滑塊

from PyQt5.QtWidgets import QDial

self.dial = QDial(self)

self.dial.setFixedSize(100,100) #設置QDail的大小

self.dial.setRange(0,100) #滑動的范圍

self.dial.setNotchesVisible(True) #顯示刻度,根據我們設置的數值自動調整

```

+ valueChanged 當改變Qdial的值時自動觸發這個信號

```python

import sys

from PyQt5.QtGui import QFont

from PyQt5.QtWidgets import QApplication, QWidget, QDial, QLabel, QHBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.setWindowTitle('QDial') # 1

self.dial = QDial(self)

self.dial.setFixedSize(100, 100) # 2

self.dial.setRange(0, 100) # 3

self.dial.setNotchesVisible(True) # 4

self.dial.valueChanged.connect(self.on_change_func) # 5

self.label = QLabel('0', self)

self.label.setFont(QFont('Arial Black', 20))

self.h_layout = QHBoxLayout()

self.h_layout.addWidget(self.dial)

self.h_layout.addWidget(self.label)

self.setLayout(self.h_layout)

def on_change_func(self):

self.label.setText(str(self.dial.value()))

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 7、計數器控件 QSpinBox

```python

from PyQt5.Qtwidgets import QSpinBox

self.spinbox = QSpinbox(self)

self.spinbox.setRange(-99,99)

self.spinbox.setSigleStep(1)

self.spinbox.setValue(66)

```

+ valueChanged 當里面的值發生變化時觸發此信號

+ setValue() 設置計數器的值。

+ value() 獲取計數器的值

QSpinBox為整型的數字計數器,而QDoubleSpinBox為浮點型的數字計數器

```python

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QSpinBox, QDoubleSpinBox, QHBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.spinbox = QSpinBox(self)

self.spinbox.setRange(-99, 99) # 1

self.spinbox.setSingleStep(1) # 2

self.spinbox.setValue(66) # 3

self.spinbox.valueChanged.connect(self.value_change_func) # 4

self.double_spinbox = QDoubleSpinBox(self) # 5

self.double_spinbox.setRange(-99.99, 99.99)

self.double_spinbox.setSingleStep(0.01)

self.double_spinbox.setValue(66.66)

self.h_layout = QHBoxLayout()

self.h_layout.addWidget(self.spinbox)

self.h_layout.addWidget(self.double_spinbox)

self.setLayout(self.h_layout)

def value_change_func(self):

decimal_part = self.double_spinbox.value() - int(self.double_spinbox.value()) # 6

self.double_spinbox.setValue(self.spinbox.value() + decimal_part) # 7

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 8 定時器和進度條

QTimer

```python

self.timer = QTimer(self)

self.timer.start(100) #開始啟動,沒過100ms觸發timeout信號

self.tiomer.stop() #停止

```

+ isActive() 為True時表示計時器已啟動,False為計時器沒有啟動

+ timeout 超時信號器,當有超時信號來時自動觸發

```python

import sys

from PyQt5.QtCore import QTimer, Qt

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.label = QLabel('0', self) # 1

self.label.setAlignment(Qt.AlignCenter)

self.step = 0 # 2

self.timer = QTimer(self) # 3

self.timer.timeout.connect(self.update_func) #到達計時時長之后自動觸發

self.ss_button = QPushButton('Start', self) # 4

self.ss_button.clicked.connect(self.start_stop_func)

self.v_layout = QVBoxLayout()

self.v_layout.addWidget(self.label)

self.v_layout.addWidget(self.ss_button)

self.setLayout(self.v_layout)

def start_stop_func(self):

if not self.timer.isActive():

self.ss_button.setText('Stop')

self.timer.start(1000) #開始計時,并設置計時的時長,每次到達后,自動重新計時

else:

self.ss_button.setText('Start')

self.timer.stop()

def update_func(self):

self.step += 1

self.label.setText(str(self.step))

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

QProgressBar

```python

from PyQt5.QtWidgets importy QProcessBar

self.progressbar = QProgressBar(self)

self.progressbar.setMinimum(0)

self.progressbar.setMaximum(100)

```

+ setQrientation(Qt.Vertical) 設置進度條是垂直顯示的,進度條默認是水平的

+ reset() 重置進度條

```python

import sys

from PyQt5.QtCore import Qt, QTimer

from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QPushButton, QHBoxLayout, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.progressbar = QProgressBar(self) # 1

# self.progressbar.setOrientation(Qt.Vertical)

self.progressbar.setMinimum(0) # 2

self.progressbar.setMaximum(100)

# self.progressbar.setRange(0, 100)

self.step = 0 # 3

self.timer = QTimer(self) # 4

self.timer.timeout.connect(self.update_func)

self.ss_button = QPushButton('Start', self) # 5

self.ss_button.clicked.connect(self.start_stop_func)

self.reset_button = QPushButton('Reset', self) # 6

self.reset_button.clicked.connect(self.reset_func)

self.h_layout = QHBoxLayout()

self.v_layout = QVBoxLayout()

self.h_layout.addWidget(self.ss_button)

self.h_layout.addWidget(self.reset_button)

self.v_layout.addWidget(self.progressbar)

self.v_layout.addLayout(self.h_layout)

self.setLayout(self.v_layout)

def start_stop_func(self):

if self.ss_button.text() == 'Start':

self.ss_button.setText('Stop')

self.timer.start(100)

else:

self.ss_button.setText('Start')

self.timer.stop()

def update_func(self):

self.step += 1

self.progressbar.setValue(self.step)

if self.step >= 100:

self.ss_button.setText('Start')

self.timer.stop()

self.step = 0

def reset_func(self):

self.progressbar.reset()

self.ss_button.setText('Start')

self.timer.stop()

self.step = 0

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 9 液晶數字顯示屏QLCDNumber

```python

from PyQt5.QtWidgets import QLCDNumber

self.lcd_1 = QLCDNumber(self)

self.lcd_1.setDigitCount(10) #顯示多少數字

self.lcd_1.display(1234567890)

```

+ setSegmentStyle()可以設置顯示屏數字樣式

| 常量 | 值 | 描述 |

| ------------------ | ---- | ---------------------------------------- |

| QLCDNumber.Outline | 0 | 讓內容浮顯,其顏色同顯示屏背景顏色相同 |

| QLCDNumber.Filled | 1 | 讓內容浮顯,顏色同窗口標題顏色相同 |

| QLCDNumber.Flat | 2 | 讓內容扁平化顯示,顏色同窗口標題顏色相同 |

+ setSmallDecimalPoint(bool)方法key9i設置小數點的顯示方式:為True小數點就在兩個數字之間顯示出來,而不會單獨占一個位置,如果為False,那么就會單獨占位(默認為False)

+ setMode()方法來更改數字顯示方式

| 參數 | 值 | 描述 |

| -------------- | ---- | -------- |

| QLCDNumber.Hex | 0 | 十六進制 |

| QLCDNumber.Dec | 1 | 十進制 |

| QLCDNumber.Oct | 2 | 八進制 |

| QLCDNumber.Bin | 3 | 二進制 |

### 10 日期相關的控件

QCalendarWidget 日歷控件

```python

from PyQt5.QtWidgets import QCalendarWidget

self.calendar = QCalendarWidget(self)

self.calendar.setMinimumDate(QDate(1956,2,14))

self.calendar.setMaximumDate(QDate(6666,6,6))

self.calendat.setGridVisible(True) #是否顯示網格

self.calendat.setSelectedDate(QDate(2020,8,9))

self.calendar.setFirstDayOfWeek(Qt.Monday) #設置一周的第一天是星期幾

```

+ setFirstDayOfWeek() 設置一個星期的第一天,默認是星期天

| Qt.Monday | 星期一 |

| ------------ | ------ |

| Qt.Tuesday | 星期二 |

| Qt.Wednesday | 星期三 |

| Qt.Thursday | 星期四 |

| Qt.Friday | 星期五 |

| Qt.Saturday | 星期六 |

| Qt.Sunday | 星期天 |

+ selectedDate().toString('ddd') 方法獲取星期的縮寫

#### QDateTimeEdit

```python

from PyQt5.QtWidgets import QDateTimeEdit,QDateEdit,QTimeEdit

from PyQt5.QtCore import QDate,QTime,QDateTime

self.datetime_1 = QDateTimeEdit(self) #初始時間2000年1月1號

self.datetime_2 = QDateTimeEdit(QDateTime.currentDateTime(),self) #系統的當前時間

self.datetime_2.setDisplayFormat("yyyy-MM-dd HH:mm:ss") #顯示的格式 'yyyy/MM/dd','HH:mm:ss'

print(self.datetime_2.date()) #日期

print(self.datetime_2.time())#時間

print(self.datetime_2.dateTime()) #日期+時間

self.datetime_2.setCalendarPopup(True) #改變日期的時候調用日歷

```

+ dateChanged 當時間改變的時候觸發此信號

```python

import sys

from PyQt5.QtCore import QDate, QTime, QDateTime

from PyQt5.QtWidgets import QApplication, QWidget, QDateTimeEdit, QDateEdit, QTimeEdit, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.datetime_1 = QDateTimeEdit(self) # 1

self.datetime_1.dateChanged.connect(lambda: print('Date Changed!'))

self.datetime_2 = QDateTimeEdit(QDateTime.currentDateTime(), self) # 2

self.datetime_2.setDisplayFormat('yyyy-MM-dd HH:mm:ss')

self.datetime_2.timeChanged.connect(lambda: print('Time Changed!'))

print(self.datetime_2.date())

print(self.datetime_2.time())

print(self.datetime_2.dateTime())

self.datetime_3 = QDateTimeEdit(QDateTime.currentDateTime(), self) # 3

self.datetime_3.dateTimeChanged.connect(lambda: print('DateTime Changed!'))

self.datetime_3.setCalendarPopup(True)

self.datetime_4 = QDateTimeEdit(QDate.currentDate(), self) # 4

self.datetime_5 = QDateTimeEdit(QTime.currentTime(), self)

self.date = QDateEdit(QDate.currentDate(), self) # 5

self.date.setDisplayFormat('yyyy/MM/dd')

print(self.date.date())

self.time = QTimeEdit(QTime.currentTime(), self) # 6

self.time.setDisplayFormat('HH:mm:ss')

print(self.time.time())

self.v_layout = QVBoxLayout()

self.v_layout.addWidget(self.datetime_1)

self.v_layout.addWidget(self.datetime_2)

self.v_layout.addWidget(self.datetime_3)

self.v_layout.addWidget(self.datetime_4)

self.v_layout.addWidget(self.datetime_5)

self.v_layout.addWidget(self.date)

self.v_layout.addWidget(self.time)

self.setLayout(self.v_layout)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 11、各種對話框

QDialog是所有對話框的基類

下面四種為常見的對話框

QMessageBox 消息對話框

QColorDialog 顏色對話框

QFontDialog 字體對話框

QInPutDialog 輸入對話框

QFileDialog 文件對話框

#### 消息對話框QmessageBox

總共分為以下幾種

1、關于對話框

```python

QMessageBox.about(self, 'Title', "content")

```

2、錯誤對話框

```python

QMessageBox.critical(self, 'Title', "content")

```

3、警告對話框

```python

QMessageBox.warning(self, 'Title', "content")

```

4、提問對話

```python

QMessageBox.question(self, 'Title', 'Content')

```

5、消息對話框

```python

from PyQt5.QtWidgets import QMessageBox

QMessageBox.information(self, 'Title', "content", QMessageBox.Yes | QMessageBox.No

| QMessageBox.Cancel)

```

```python

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.button = QPushButton('information', self)

self.button.clicked.connect(self.show_messagebox)

def show_messagebox(self):

#第一個參數填self表示這個消息對話框是屬于Demo窗口的

QMessageBox.information(self, 'Title', 'Content',

QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

常見的按鈕類型有以下幾種:

+ QMessageBox.OK

+ QMessageBox.Yes

+ QMessageBox.No

+ QMessageBox.Close

+ QMessageBox.Cancel

+ QMessageBox.Open

+ QMessageBox.Save

有2點差異

1、顯示的對話框圖標可能不同

2、顯示的按鈕是不一樣的

```python

#與消息框進行交互

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.button = QPushButton('Click Me!', self)

self.button.clicked.connect(self.show_messagebox)

def show_messagebox(self):

choice = QMessageBox.question(self, 'Change Text?', 'Would you like to change the button text?',

QMessageBox.Yes | QMessageBox.No)

#選擇不同的按鈕,有不同選擇

if choice == QMessageBox.Yes:

self.button.setText('Changed!')

elif choice == QMessageBox.No:

pass

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

```python

#調用父類QDialog來使用消息框

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QDialog, QLineEdit, QPushButton

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.resize(300, 100)

self.dialog = SigninPage()

self.btn = QPushButton("調用Dialog", self)

self.btn.clicked.connect(self.my_dialog)

def my_dialog(self):

self.dialog.exec_() #使用exec_()方法可以在主程序中加載一個dialog出來

class SigninPage(QDialog):

def __init__(self):

super(SigninPage, self).__init__()

self.resize(200, 100)

self.line = QLineEdit("我是一個新的dialog", self)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

#### 顏色對話框和字體對話框

```python

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QColorDialog, QFontDialog, QPushButton,QHBoxLayout, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.text_edit = QTextEdit(self)

self.color_btn = QPushButton('Color', self)

self.font_btn = QPushButton('Font', self)

self.color_btn.clicked.connect(lambda: self.open_dialog_func(self.color_btn))

self.font_btn.clicked.connect(lambda: self.open_dialog_func(self.font_btn))

self.h_layout = QHBoxLayout()

self.h_layout.addWidget(self.color_btn)

self.h_layout.addWidget(self.font_btn)

self.v_layout = QVBoxLayout()

self.v_layout.addWidget(self.text_edit)

self.v_layout.addLayout(self.h_layout)

self.setLayout(self.v_layout)

def open_dialog_func(self, btn):

if btn == self.color_btn:

color = QColorDialog.getColor() #獲取顏色框

if color.isValid():

self.text_edit.setTextColor(color) #設置顏色

else:

font, ok = QFontDialog.getFont() #獲取字體的框

if ok:

self.text_edit.setFont(font) #設置字體

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

#### 輸入對話框

輸入對話框一共有五種輸入的方法:

| 方法 | 用法 |

| ------------------ | ---------------------- |

| getItem() | 從下拉框中獲取選項輸入 |

| getInt() | 獲取整型值輸入 |

| getDouble() | 獲取浮點型值輸入 |

| getText() | 獲取字符輸入 |

| getMultiLineText() | 獲取多行字符串輸入 |

```python

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QTextEdit, QPushButton,QGridLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.name_btn = QPushButton('Name', self)

self.gender_btn = QPushButton('Gender', self)

self.age_btn = QPushButton('Age', self)

self.score_btn = QPushButton('Score', self)

self.info_btn = QPushButton('Info', self)

self.name_btn.clicked.connect(lambda: self.open_dialog_func(self.name_btn))

self.gender_btn.clicked.connect(lambda: self.open_dialog_func(self.gender_btn))

self.age_btn.clicked.connect(lambda: self.open_dialog_func(self.age_btn))

self.score_btn.clicked.connect(lambda: self.open_dialog_func(self.score_btn))

self.info_btn.clicked.connect(lambda: self.open_dialog_func(self.info_btn))

self.name_line = QLineEdit(self)

self.gender_line = QLineEdit(self)

self.age_line = QLineEdit(self)

self.score_line = QLineEdit(self)

self.info_textedit = QTextEdit(self)

self.g_layout = QGridLayout()

self.g_layout.addWidget(self.name_btn, 0, 0, 1, 1)

self.g_layout.addWidget(self.name_line, 0, 1, 1, 1)

self.g_layout.addWidget(self.gender_btn, 1, 0, 1, 1)

self.g_layout.addWidget(self.gender_line,1, 1, 1, 1)

self.g_layout.addWidget(self.age_btn, 2, 0, 1, 1)

self.g_layout.addWidget(self.age_line, 2, 1, 1, 1)

self.g_layout.addWidget(self.score_btn, 3, 0, 1, 1)

self.g_layout.addWidget(self.score_line, 3, 1, 1, 1)

self.g_layout.addWidget(self.info_btn, 4, 0, 1, 1)

self.g_layout.addWidget(self.info_textedit, 4, 1, 1, 1)

self.setLayout(self.g_layout)

def open_dialog_func(self, btn):

if btn == self.name_btn: #QInputDialog為輸入對話框

name, ok = QInputDialog.getText(self, 'Name Input', 'Please enter the name:')

if ok:

self.name_line.setText(name)

elif btn == self.gender_btn:

gender_list = ['Female', 'Male']

gender, ok = QInputDialog.getItem(self, 'Gender Input', 'Please choose the gender:', gender_list, 0, False)

if ok:

self.gender_line.setText(gender)

elif btn == self.age_btn:

age, ok = QInputDialog.getInt(self, 'Age Input', 'Please select the age:')

if ok:

self.age_line.setText(str(age))

elif btn == self.score_btn:

score, ok = QInputDialog.getDouble(self, 'Score Input', 'Please select the score:')

if ok:

self.score_line.setText(str(score))

else:

info, ok = QInputDialog.getMultiLineText(self, 'Info Input', 'Please enter the info:')

if ok:

self.info_textedit.setText(info)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

#### 文件對話框

```python

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QPushButton, QMessageBox, QVBoxLayout,QHBoxLayout, QFileDialog

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.is_saved = True

self.is_saved_first = True

self.path = ''

self.textedit = QTextEdit(self)

self.textedit.textChanged.connect(self.on_textchanged_func) #文本內容改變時自動觸發

self.button = QPushButton('Save', self)

self.button.clicked.connect(self.on_clicked_func)

self.button_2 = QPushButton('Open', self)

self.button_2.clicked.connect(self.open_file_func)

self.h_layout = QHBoxLayout()

self.h_layout.addWidget(self.button)

self.h_layout.addWidget(self.button_2)

self.v_layout = QVBoxLayout()

self.v_layout.addWidget(self.textedit)

self.v_layout.addLayout(self.h_layout)

self.setLayout(self.v_layout)

def on_textchanged_func(self):

if self.textedit.toPlainText():

self.is_saved = False

else:

self.is_saved = True

def on_clicked_func(self):

if self.is_saved_first:

self.save_as_func(self.textedit.toPlainText())

else:

self.save_func(self.textedit.toPlainText())

def save_func(self, text):

with open(self.path, 'w') as f:

f.write(text)

self.is_saved = True

def save_as_func(self, text):

#保存文件的對話框

self.path, _ = QFileDialog.getSaveFileName(self, 'Save File', './', 'Files (*.txt *.log)')

if self.path:

with open(self.path, 'w') as f:

f.write(text)

self.is_saved = True

self.is_saved_first = False

def open_file_func(self):

#打開文本對話框

file, _ = QFileDialog.getOpenFileName(self, 'Open File', './', 'Files (*.txt *.log)')

if file:

with open(file, 'r') as f:

self.textedit.clear()

self.textedit.setText(f.read())

self.is_saved = True

#關閉程序事件

def closeEvent(self, QCloseEvent):

if not self.is_saved:

choice = QMessageBox.question(self, '', 'Do you want to save the text?',

QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)

if choice == QMessageBox.Yes:

self.on_clicked_func()

QCloseEvent.accept()

elif choice == QMessageBox.No:

QCloseEvent.accept()

else:

QCloseEvent.ignore()

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 12、繪圖API:繪制文本 QPainter

drawText()

1.文本

2、各種圖形(直線、點、橢圓、弧、扇形、多變形等)

3、圖形

painter = QPainter()

painter.begin()

painter.drawText()

painter.end()

必須在pantEvent事件中繪制各種元素

#### 用像素繪制正弦曲線QPainter

drawPoint(x,y)

#### 繪制不同的直線QPainter

drawLine()

#### 繪制不同的圖像

rect = QRect(0,10,100,100)

aln:1一個alen等于1/16度

drawArc(rect ,0, 45*16)

#### 繪制帶鉉的弧

drawpie(10,240,100,100,12,130*16)

橢圓

drawEllipse(120,120,150,100)

### 13 組合框QGroupBox和工具箱QToolBox

#### QGroupBox

容器,可以把相同功能的控件放在一起,使得界面更加清晰

```python

import sys

from PyQt5.QtCore import Qt

from PyQt5.QtGui import QPixmap

from PyQt5.QtWidgets import QApplication, QWidget, QGroupBox, QRadioButton, QLabel, QHBoxLayout, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.groupbox_1 = QGroupBox('On and Off', self) # 1

self.groupbox_2 = QGroupBox('Change Color', self)

self.red = QRadioButton('Red', self) # 2

self.blue = QRadioButton('Blue', self)

self.green = QRadioButton('Green', self)

self.yellow = QRadioButton('Yellow', self)

self.color_list = [self.red, self.blue, self.green, self.yellow]

self.on = QRadioButton('On', self) # 3

self.off = QRadioButton('Off', self)

self.pic_label = QLabel(self) # 4

self.h1_layout = QHBoxLayout()

self.h2_layout = QHBoxLayout()

self.h3_layout = QHBoxLayout()

self.all_v_layout = QVBoxLayout()

self.layout_init()

self.radiobutton_init()

self.label_init()

def layout_init(self):

self.h1_layout.addWidget(self.on)

self.h1_layout.addWidget(self.off)

self.groupbox_1.setLayout(self.h1_layout)

self.h2_layout.addWidget(self.red)

self.h2_layout.addWidget(self.blue)

self.h2_layout.addWidget(self.green)

self.h2_layout.addWidget(self.yellow)

self.groupbox_2.setLayout(self.h2_layout)

self.h3_layout.addWidget(self.groupbox_1)

self.h3_layout.addWidget(self.groupbox_2)

self.all_v_layout.addWidget(self.pic_label)

self.all_v_layout.addLayout(self.h3_layout)

self.setLayout(self.all_v_layout)

def radiobutton_init(self):

self.yellow.setChecked(True) # 5

for btn in self.color_list:

btn.clicked.connect(self.change_color_func)

self.off.setChecked(True) # 6

self.off.toggled.connect(self.on_and_off_func)

def label_init(self): # 7

self.pic_label.setPixmap(QPixmap('images/Off.png'))

self.pic_label.setAlignment(Qt.AlignCenter)

def change_color_func(self):

if self.on.isChecked():

path = 'images/{}_light.png'.format([btn.text() for btn in self.color_list if btn.isChecked()][0])

self.pic_label.setPixmap(QPixmap(path))

def on_and_off_func(self):

if self.on.isChecked():

path = 'images/{}_light.png'.format([btn.text() for btn in self.color_list if btn.isChecked()][0])

self.pic_label.setPixmap(QPixmap(path))

else:

self.pic_label.setPixmap(QPixmap('images/Off_light.png'))

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

QToolBox

工具箱,這個工具箱有很多的抽屜,每次只能打開一個,抽屜里面放了很多格式各樣的東西

```python

import sys

from PyQt5.QtGui import QIcon

from PyQt5.QtWidgets import QApplication, QToolBox, QGroupBox, QToolButton, QVBoxLayout

class Demo(QToolBox): # 1

def __init__(self):

super(Demo, self).__init__()

self.groupbox_1 = QGroupBox(self) # 2

self.groupbox_2 = QGroupBox(self)

self.groupbox_3 = QGroupBox(self)

self.toolbtn_f1 = QToolButton(self) # 3

self.toolbtn_f2 = QToolButton(self)

self.toolbtn_f3 = QToolButton(self)

self.toolbtn_m1 = QToolButton(self)

self.toolbtn_m2 = QToolButton(self)

self.toolbtn_m3 = QToolButton(self)

self.v1_layout = QVBoxLayout()

self.v2_layout = QVBoxLayout()

self.v3_layout = QVBoxLayout()

self.addItem(self.groupbox_1, 'Couple One') # 一個Item相當于一個抽屜

self.addItem(self.groupbox_2, 'Couple Two')

self.addItem(self.groupbox_3, 'Couple Three')

self.currentChanged.connect(self.print_index_func) # 5

self.layout_init()

self.groupbox_init()

self.toolbtn_init()

def layout_init(self):

self.v1_layout.addWidget(self.toolbtn_f1)

self.v1_layout.addWidget(self.toolbtn_m1)

self.v2_layout.addWidget(self.toolbtn_f2)

self.v2_layout.addWidget(self.toolbtn_m2)

self.v3_layout.addWidget(self.toolbtn_f3)

self.v3_layout.addWidget(self.toolbtn_m3)

def groupbox_init(self): # 6

self.groupbox_1.setFlat(True)

self.groupbox_2.setFlat(True)

self.groupbox_3.setFlat(True)

self.groupbox_1.setLayout(self.v1_layout)

self.groupbox_2.setLayout(self.v2_layout)

self.groupbox_3.setLayout(self.v3_layout)

def toolbtn_init(self): # 7

self.toolbtn_f1.setIcon(QIcon('images/cartoon1.ico'))

self.toolbtn_f2.setIcon(QIcon('images/cartoon2.ico'))

self.toolbtn_f3.setIcon(QIcon('images/cartoon3.ico'))

self.toolbtn_m1.setIcon(QIcon('images/cartoon4.ico'))

self.toolbtn_m2.setIcon(QIcon('images/close.ico'))

self.toolbtn_m3.setIcon(QIcon('images/cut.ico'))

def print_index_func(self):

couple_dict = {

0: 'Couple One',

1: 'Couple Two',

2: 'Couple Three'

}

sentence = 'You are looking at {}.'.format(couple_dict.get(self.currentIndex()))

print(sentence)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 14 窗口坐標

窗口分為三塊:標題欄,邊框,和客戶區

+ x()——得到窗口左上角在顯示屏屏幕上的x坐標;

+ y()——得到窗口左上角在顯示屏屏幕上的y坐標;

+ pos()——得到窗口左上角在顯示屏屏幕上的x和y坐標,類型為QPoint();

+ geometry().x()——得到客戶區左上角在顯示屏屏幕上的x坐標;

+ geometry().y()——得到客戶區左上角在顯示屏屏幕上的y坐標;

+ geometry()——得到客戶區左上角在顯示屏屏幕上的x和y坐標,以及客戶區的寬度和長度,類型為QRect();

+ width()——得到客戶區的寬度;

+ height()——得到客戶區的長度;

+ geometry().width()——得到客戶區的寬度;

+ geometry().height()——得到客戶區的長度;

+ frameGeometry().width()——得到窗口的寬度;

+ frameGeometry().height()——得到窗口的長度;

```python

import sys

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':

app = QApplication(sys.argv)

widget = QWidget()

widget.resize(200, 200) # 1

widget.move(100, 100) # 2

# widget.setGeometry(100, 100, 200, 200) # 3

widget.show()

print('-----------------x(), y(), pos()-----------------')

print(widget.x())

print(widget.y())

print(widget.pos())

print('-----------------width(), height()-----------------')

print(widget.width())

print(widget.height())

print('-----------------geometry().x(), geometry.y(), geometry()-----------------')

print(widget.geometry().x())

print(widget.geometry().y())

print(widget.geometry())

print('-----------------geometry.width(), geometry().height()-----------------')

print(widget.geometry().width())

print(widget.geometry().height())

print('-----------------frameGeometry().x(), frameGeometry().y(), frameGeometry(), '

'frameGeometry().width(), frameGeometry().height()-----------------')

print(widget.frameGeometry().x())

print(widget.frameGeometry().y())

print(widget.frameGeometry())

print(widget.frameGeometry().width())

print(widget.frameGeometry().height())

sys.exit(app.exec_())

```

### 15 事件處理

#### 窗口關閉事件

```python

def closeEvent(self, QCloseEvent) 是QWidget的窗口關閉函數,通過重寫這個函數,可以定制化關閉的功能

QCloseEvent.accept() #接受窗口關閉的操作

QCloseEvent.ignore() #不接受窗口關閉的操作

```

#### 鼠標事件

```python

def mouseMoveEvent(self, QMouseEvent):

def mousePressEvent(self, QMouseEvent):

def mouseReleaseEvent(self, QMouseEvent):

def mouseDoubleClickEvent(self, QMouseEvent):

這四個函數都是QWidget的函數,作用分別是:鼠標移動觸發、鼠標按下的時候觸發、鼠標釋放的時候觸發

和鼠標雙擊的時候觸發。通過重構這四個函數,可以對鼠標事件進行定制化的功能。

```

+ Qt.LeftButton 、Qt.MidButton、Qt.RightButton:分別表示點擊的是左鍵、之間鍵、右鍵。

+ QMouseEvent.x()、QMouseEvent.y()表示獲取鼠標離程序的坐標

+ QMouseEvent.globalX()、QMouseEvent.globalY()表示鼠標離桌面的坐標

+ self.setMouseTracking(True) 表示讓窗口始終追蹤鼠標。

#### 鍵盤事件

```python

def keyPressEvent(self,QkeyEvent)

def keyReleaseEvent(self,QkeyEvent)

這個兩個函數式QWidget的函數,分別表示鍵盤任意鍵的按下和釋放。

```

+ QkeyEvent 表示接受的按鍵的值

### 16 拖放與剪貼板

拖放和剪貼板的功能原理基礎都是QMimeData類

| 判斷函數 | 獲取函數 | 設置函數 | MIME類型 |

| ---------- | ----------- | -------------- | ------------------- |

| hasText() | text() | setText() | text/plain |

| hasHtml() | html() | setHtml() | text/html |

| hasUrls() | urls() | setUrls() | text/uri-list |

| hasImage() | imageData() | setImageData() | image/* |

| hasColor() | colorData() | setColorData() | application/x-color |

#### 拖放

拖放分為拖動和放下兩個動作,它們涉及到以下的事件:

+ DragEnterEvent: 所拖動目標進入接收該事件的窗口或控件時觸發;

+ DragMoveEvent: 所拖動目標進入窗口或控件后,繼續被拖動時觸發;

+ DragLeaveEvent: 所拖動目標離開窗口或控件時觸發;

+ DropEvent: 所拖動目標被放下時觸發。

#### 剪貼板

```python

from PyQt5.QtWidgets import QApplication

self.clipboard = QApplication.clipboard() #實例化一個剪貼板

self.clipboard.setText("xxxxxx") #將內容放在剪切板中

self.clipboard.text() #取出剪貼板中的內容

```

+ dataChanged 當剪貼板中的內容發生變化時候,將觸發這個信號。

剪貼板的常用方法

### 17 列表控件、樹形控件、表格控件

QListWidget列表控件應當與QListWidgetItem一起使用,后者作為項被添加入列表控件中

QTreeWidget樹形控件應當與QTreeWidgetItem一起使用,后者作為項被添加入列表控件中

QTableWidget表格控件應當與QTableWidgetItem一起使用,后者作為項被添加入列表控件中

#### 列表控價

```python

from PyQt5.QtWidgets import QListWidget,QListWidgetItem

self.listwidget_1 = QListWidget(self) #實例化一個列表控件

#添加列表控件的幾種方式:

1.

self.item = QListWidgetItem(text)

self.listwidget_1.addItem(self.item)

2

self.item_6 = QListWidgetItem('Item 6', self.listwidget_1)

3

self.listwidget_1.addItem('Item 7')

4

str_list = ['Item 9', 'Item 10']

self.listwidget_1.addItems(str_list)

5

self.item_8 = QListWidgetItem('Item 8')

self.listwidget_1.insertItem(8, self.item_8)

```

+ currentItem() 獲取當前點擊的項

#### 樹形控件

```python

from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem

self.tree = QTreeWidget(self) #實例化一個樹形控件

self.tree.setColumnCount(2) #設置顯示的列數,默認是一列的

self.tree.setHeaderLabels(['Install Components', 'Test']) #設置顯示的標題

#設置第一級項

self.preview = QTreeWidgetItem(self.tree)

self.preview.setText(0, 'Preview')

#設置第二級項

self.qt5112 = QTreeWidgetItem()

self.qt5112.setText(0, 'Qt 5.11.2 snapshot')

self.qt5112.setCheckState(0, Qt.Unchecked)

self.preview.addChild(self.qt5112)

#設置第三級項

choice_list = ['macOS', 'Android x86', 'Android ARMv7', 'Sources', 'iOS']

for i, c in enumerate(choice_list):

item = QTreeWidgetItem(self.qt5112)

item.setText(0, c)

item.setCheckState(0, Qt.Unchecked)

```

+ itemClicked 表示點擊item時自動觸發

#### 表格控件

```python

from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem

class Demo(QTableWidget):

self.setRowCount(6) #設定表格的行數

self.setColumnCount(6) #設定表格的列數

self.setColumnWidth(0, 30) #設定列的大小

self.setRowHeight(0, 30) #設定行的大小

self.setHorizontalHeaderLabels(['h1', 'h2', 'h3', 'h4', ' h5', 'h6']) #設置列名

self.setVerticalHeaderLabels(['t1', 't2', 't3', 't4', 't5', 't6']) #設置行的名

self.item_1 = QTableWidgetItem('Hi') #設置表格里面的內容

self.setItem(0, 0, self.item_1)

self.setSpan(2, 2, 2, 2) #設置居中的格式,表示2行2列中有2列2行集中

```

### 18 滾動區域QScrollArea和滾動條QScollBar

```python

import sys

from PyQt5.QtCore import Qt

from PyQt5.QtGui import QPixmap

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QScrollArea, QScrollBar,QHBoxLayout, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.label = QLabel(self)

self.label.setPixmap(QPixmap('image.jpg'))

self.label.setScaledContents(True) #設置圖片會隨著label便簽的變化而變化大小

self.scroll_area = QScrollArea(self) #初始化一個滾動區域

self.scroll_area.setWidget(self.label)

#將滾動區域的水平滾動條關閉

self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

self.scrollbar = QScrollBar(Qt.Horizontal, self) #實例化一個水平的滾動條

#水平滾動條的大小和滾動區域水平滾動條的大小相同

self.scrollbar.setMaximum(self.scroll_area.horizontalScrollBar().maximum())

self.bigger_btn = QPushButton('Zoom in', self)

self.smaller_btn = QPushButton('Zoom out', self)

self.bigger_btn.clicked.connect(self.bigger_func)

self.smaller_btn.clicked.connect(self.smaller_func)

self.scrollbar.valueChanged.connect(self.sync_func)

self.h_layout = QHBoxLayout()

self.h_layout.addWidget(self.bigger_btn)

self.h_layout.addWidget(self.smaller_btn)

self.v_layout = QVBoxLayout()

self.v_layout.addWidget(self.scroll_area)

self.v_layout.addWidget(self.scrollbar)

self.v_layout.addLayout(self.h_layout)

self.setLayout(self.v_layout)

def bigger_func(self):

self.label.resize(self.label.width()*1.2, self.label.height()*1.2)

self.scrollbar.setMaximum(self.scroll_area.horizontalScrollBar().maximum())

def smaller_func(self):

self.label.resize(self.label.width() * 0.8, self.label.height() * 0.8)

self.scrollbar.setMaximum(self.scroll_area.horizontalScrollBar().maximum())

def sync_func(self):

#設置滾動區域水平滾動條的大小等于滾動條的大小

self.scroll_area.horizontalScrollBar().setValue(self.scrollbar.value())

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 層疊樣式表

```python

import sys

from PyQt5.QtWidgets import QWidget, QApplication, QListWidget, QStackedWidget,\

QHBoxLayout, QFormLayout, QRadioButton, QLabel, QLineEdit, QCheckBox

class StackUi1(QWidget):

def __init__(self):

super().__init__()

layout = QFormLayout()

layout.addRow('姓名', QLineEdit())

layout.addRow('地址', QLineEdit())

self.setLayout(layout)

class StackUi2(QWidget):

def __init__(self):

super().__init__()

layout = QFormLayout()

sex = QHBoxLayout()

sex.addWidget(QRadioButton('男'))

sex.addWidget(QRadioButton('女'))

layout.addRow(QLabel('性別'), sex)

layout.addRow('生日', QLineEdit())

self.setLayout(layout)

class StackUi3(QWidget):

def __init__(self):

super().__init__()

layout = QHBoxLayout()

# 添加控件到布局中

layout.addWidget(QLabel('科目'))

layout.addWidget(QCheckBox('物理'))

layout.addWidget(QCheckBox('高數'))

self.setLayout(layout)

class Demo(QWidget):

def __init__(self):

super().__init__()

#設置窗口的初始位置和大小

self.setGeometry(300, 300, 30, 30)

self.setWindowTitle("層疊樣式")

# 創建三個小控件

self.stack1 = StackUi1()

self.stack2 = StackUi2()

self.stack3 = StackUi3()

#創建列表窗口

self.left_list = QListWidget()

# 創建層疊樣式表

self.stack = QStackedWidget()

self.init_stack()

self.init_layout()

self.left_list.currentRowChanged.connect(self.display)

def init_layout(self):

# 水平布局,添加部件到布局中

h_layout = QHBoxLayout()

h_layout.addWidget(self.left_list)

h_layout.addWidget(self.stack)

self.setLayout(h_layout)

def init_stack(self):

# 創建列表窗口,添加條目

self.left_list.insertItem(0, "聯系方式")

self.left_list.insertItem(1, "個人信息")

self.left_list.insertItem(2, "教育程度")

self.stack.addWidget(self.stack1)

self.stack.addWidget(self.stack2)

self.stack.addWidget(self.stack3)

def display(self, i):

# 設置當前可見的選項卡的索引

self.stack.setCurrentIndex(i)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 主窗口QMainWindow

主窗口類為我們提供了菜單欄(Menu Bar)、工具欄(Tool Bar)、控件停靠區域(Docke Widgets)和狀態欄(Status Bar)。

### 19 Qt中的多線程

```PYTHON

import sys

from PyQt5.QtCore import Qt, QThread, pyqtSignal

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.button = QPushButton('Count', self)

self.button.clicked.connect(self.count_func)

self.label = QLabel('0', self)

self.label.setAlignment(Qt.AlignCenter)

self.my_thread = MyThread()

self.my_thread.my_signal.connect(self.set_label_func) # 3

self.v_layout = QVBoxLayout()

self.v_layout.addWidget(self.label)

self.v_layout.addWidget(self.button)

self.setLayout(self.v_layout)

def count_func(self):

self.my_thread.start()

def set_label_func(self, num): # 4

self.label.setText(num)

class MyThread(QThread):

my_signal = pyqtSignal(str) # 1

def __init__(self):

super(MyThread, self).__init__()

self.count = 0

def run(self):

while True:

print(self.count)

self.count += 1

self.my_signal.emit(str(self.count)) # 2

self.sleep(1)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 20、QT中的信號與槽

+ 一個信號連接一個槽

+ 多個信號連接一個槽

+ 一個信號連接另一個信號

+ 自定義信號

```python

#自定義信號

import sys

from PyQt5.QtCore import pyqtSignal # 1

from PyQt5.QtWidgets import QApplication, QWidget, QLabel

class Demo(QWidget):

my_signal = pyqtSignal() #定義信號 # 2

def __init__(self):

super(Demo, self).__init__()

self.label = QLabel('Hello World', self)

self.my_signal.connect(self.change_text) # 3

def change_text(self): #槽接受自定義信號

if self.label.text() == 'Hello World':

self.label.setText('Hello PyQt5')

else:

self.label.setText('Hello World')

def mousePressEvent(self, QMouseEvent): # 4

self.my_signal.emit() #觸發信號

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

```pyt

#攜帶參數的自定義信號

import sys

from PyQt5.QtCore import pyqtSignal

from PyQt5.QtWidgets import QApplication, QWidget

class Demo(QWidget):

my_signal = pyqtSignal(int) #攜帶的值,需要說明類型

def __init__(self):

super(Demo, self).__init__()

self.my_signal.connect(self.signal_slot)

def signal_slot(self, x): 形參x接收

print('信號發射成功')

print(x)

def mouseDoubleClickEvent(self, event):

pos_x = event.pos().x()

self.my_signal.emit(pos_x)#觸發信號時攜帶參數

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

```python

#把一個窗口的信息傳遞給另一個窗口時,可以把第一窗口期的實例化對象傳給第二個窗口,但是這樣的話,兩個窗口的耦合性太強了。可以在第一個窗口建立一個槽函數,第二個窗口建立信號。

import sys

from PyQt5.QtCore import pyqtSignal

from PyQt5.QtWidgets import QApplication, QWidget, QTextBrowser, QLineEdit, QPushButton, QHBoxLayout

class Window1(QTextBrowser): # 1

def __init__(self):

super(Window1, self).__init__()

def show_msg_slot(self, msg):

self.append(msg)

class Window2(QWidget): # 2

win2_signal = pyqtSignal(str)

def __init__(self):

super(Window2, self).__init__()

self.line = QLineEdit()

self.send_btn = QPushButton('發送')

self.send_btn.clicked.connect(self.send_to_win1_slot)

h_layout = QHBoxLayout()

h_layout.addWidget(self.line)

h_layout.addWidget(self.send_btn)

self.setLayout(h_layout)

def send_to_win1_slot(self):

msg = self.line.text()

self.win2_signal.emit(msg)

if __name__ == '__main__': # 3

app = QApplication(sys.argv)

win1 = Window1()

win1.show()

win2 = Window2()

win2.show()

win2.win2_signal.connect(win1.show_msg_slot) #信號與槽在此綁定,可以減少兩個類之間的耦合性

sys.exit(app.exec_())

```

```python

#線程之間的通信

import sys

import random

from PyQt5.QtCore import pyqtSignal, QThread

from PyQt5.QtWidgets import QApplication, QWidget, QTextBrowser, QPushButton, QVBoxLayout

class ChildThread(QThread):

child_signal = pyqtSignal(str) # 1

def __init__(self):

super(ChildThread, self).__init__()

def run(self): # 2

result = str(random.randint(1, 10000))

for _ in range(100000000):

pass

self.child_signal.emit(result)

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

self.browser = QTextBrowser() # 3

self.btn = QPushButton('開始爬取')

self.btn.clicked.connect(self.start_thread_slot)

v_layout = QVBoxLayout()

v_layout.addWidget(self.browser)

v_layout.addWidget(self.btn)

self.setLayout(v_layout)

self.child_thread = ChildThread() # 4

self.child_thread.child_signal.connect(self.child_thread_done_slot)

def start_thread_slot(self):

self.browser.clear()

self.browser.append('爬蟲開啟')

self.btn.setText('正在爬取')

self.btn.setEnabled(False)

self.child_thread.start()

def child_thread_done_slot(self, msg):

self.browser.append(msg)

self.browser.append('爬取結束')

self.btn.setText('開始爬取')

self.btn.setEnabled(True)

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

### 21、布局管理

+ 垂直布局QVBoxLaout

```python

#通用情況

v_layout = QVBoxLaout()

v_latout.addWiget(xxxx1)

v_latout.addWiget(xxxx2)

self.setLayout(v_latout)

```

+ 水平布局QHBoxLayout

+ 混合使用QVBoxLaout和QHBoxLayout

+ 表單布局QFormLayout

```python

f_layout = QFormLayout()

v_layout = QVBoxLayout()

f_layout.addRow(xxx1, xxx2) #前面的為label,后面的為line

v_layout.addLayout(self.f_layout) #將表單布局加入其他的布局中

```

+ 網格布局QGridLaout

```python

grid_layout = QGridLayout()

grid_layout.addWidget(xxxx1, 0, 0, 1, 1) #第一行第一列,標簽的大小為占一行一列

```

### 學會使用文檔

1 安裝QtAssistant軟件,并下載文檔查看

2 在線文檔

如果不用QtAssistant軟件的話,我們也可以通過以下鏈接來進行文檔查詢:

http://pyqt.sourceforge.net/Docs/PyQt5/class_reference.html

[文檔地址1:https://doc.qt.io/qtforpython/modules.html](https://doc.qt.io/qtforpython/modules.html)

[文檔地址2:https://www.riverbankcomputing.com/static/Docs/PyQt5/sip-classes.html](https://www.rrbankcomputing.com/static/Docs/PyQt5/sip-classes.html)

## PyQt5圖形界面編程

### QWidget

```python

#屬性

setWindowTitle('學點編程吧出品') #設置標題

resize(250, 150) #調整控件的大小

move(300, 300) #移動到控件的位置,如果是最外層的控件則是屏幕的位置

from PyQt5.QtGui import QIcon

setWindowIcon(QIcon('xdbcb8.ico'))

setMouseTracking(True) #開啟鼠標跟蹤的功能,鼠標沒有按下也會接受鼠標的移動事件

update() #刷新控件。

```

```python

#方法

show() #顯示控件

def keyPressEvent(self, e): #QWdiget自帶的事件處理程序,當按下鍵盤時自動觸發,e觸發的事件,e.key()鍵盤輸入的值

def mouseMoveEvent(self, event): #QWiget控件自帶事件處理程序,當鼠標移動的時候觸發,需要開啟鼠標跟蹤的功能, event.x event.y 表示鼠標當前位置的坐標。

def mousePressEvent(self, e): #QWidget控件自帶事件處理程序,當單擊鼠標的時候自動觸發

def eventFilter(self, object, event) #事件過濾器。

```

### QDialog

```python

QWidget 是QDialog的父類

done(1)#退出控件

```

### PushButton

```python

QPushButton('按鍵名稱', self) #控件實例

setToolTip('點擊這里猜數字') #鼠標懸停在按鍵上面的時候出現提示,支持富文本

clicked #點擊事件,單擊松開為一個完整的點擊事件

```

### QLineEdit

```Python

QLineEdit('內容', self) #控件實例

text() #控件的內容

setFocus() #讓焦點置于文本框中,使文本處于選中的狀態

selectAll() #表示選文本框時,對里面的內容進行全選

clear() #對內容進行清除

from PyQt5.QtCore import Qt

setContextMenuPolicy(Qt.NoContextMenu) #禁止在文本框內右鍵彈出菜單

setPlaceholderText() #文本框為空的時候出現提示

setEchoMode(QLineEdit.Password) #設置顯示方式為密碼,輸入的值將不可見

from PyQt5.QtCore import QRegExp

from PyQt5.QtGui import QRegExpValidator

regx = QRegExp("^[a-zA-Z][0-9A-Za-z]{14}$") #在QLinEdit中加入正則顯示器

validator = QRegExpValidator(regx, ledit) #構造一個驗證器,該父對象接受與正則表達式匹配的所有字符串

setValidator(validator)

```

#顯示模式

| 方式 | 描述 |

| ---------------------------- | ------------------------------------------------ |

| QLineEdit.Normal | 顯示輸入的字符。這是默認值 |

| QLineEdit.NoEcho | 不要顯示任何東西,這可能適用于密碼長度保密的密碼 |

| QLineEdit.Password | 顯示密碼字符 |

| QLineEdit.PasswordEchoOnEdit | 在編輯時顯示字符,其他時候顯示密碼 |

### QMeeageBox

```python

QMessageBox.about(self, '內容') #控件實例

QMessageBox.question(self, "標題", "內容", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) #

QMessageBox.critical(self, "內容", )

QMessageBox.warning(self, "內容", )

QMessageBox.information(self, "內容", )

msgBox = QMessageBox(QMessageBox.NoIcon, '關于','不要意淫了,早點洗洗睡吧!') #基于屬性的方式設置消息框的圖片

msgBox.setIconPixmap(QPixmap("images/screen2.jpg"))

```

```python

import sys

from PyQt5.QtWidgets import QMessageBox, QApplication, QWidget, QPushButton

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

btn = QPushButton("按鍵", self)

btn.clicked.connect(self.closeEvent)

def closeEvent(self, event):

reply = QMessageBox.question(self, '確認', '確認退出嗎', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

if reply == QMessageBox.Yes:

event.accept()

else:

pass

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

消息對話框的調用可以分為兩種1、靜態函數的調用;2、基于屬性的調用,上面的例子是靜態函數的調用,下面的例子是基于屬性的調用

```python

import sys

from PyQt5.QtWidgets import QMessageBox, QApplication, QWidget, QPushButton

from PyQt5.QtWidgets import QCheckBox, QLabel

class Demo(QWidget):

def __init__(self):

super(Demo, self).__init__()

btn = QPushButton("按鍵", self)

self.la = QLabel('這里將會顯示我們選擇的按鈕信息', self)

self.la.move(20,20)

btn.clicked.connect(self.closeEvent)

def closeEvent(self, event):

cb = QCheckBox('所有文檔都按此操作')

msgBox = QMessageBox()

msgBox.setWindowTitle('警告')

msgBox.setIcon(QMessageBox.Warning)

msgBox.setText('這是一個警告消息對話框')

msgBox.setInformativeText('出現更改愿意保存嗎?')

Save = msgBox.addButton('按鍵1', QMessageBox.AcceptRole)

msgBox.addButton('按鍵2', QMessageBox.RejectRole)

msgBox.addButton('按鍵3', QMessageBox.DestructiveRole)

msgBox.setDefaultButton(Save)

msgBox.setCheckBox(cb)

cb.stateChanged.connect(self.check)

reply = msgBox.exec_()

if reply == QMessageBox.AcceptRole:

self.la.setText('你選擇了保存!')

elif reply == QMessageBox.RejectRole:

self.la.setText('你選擇了取消!')

else:

self.la.setText('你選擇了不保存!')

def check(self):

if self.sender().isChecked():

self.la.setText('你打勾了哦')

else:

self.la.setText('怎么又不打了啊')

if __name__ == '__main__':

app = QApplication(sys.argv)

demo = Demo()

demo.show()

sys.exit(app.exec_())

```

按鍵的類型

![preview](https://pic1.zhimg.com/v2-41d34adff13956dff87681ed73bb5e04_r.jpg)

### QLabel

```python

QLabel('內容',self)

setText("新的內容")

```

### QCheckBox

```python

Qt.Checked #2

Qt.PartiallyChecked #半選1

Qt.UnChecked #0

isChecked() #查詢狀態全選為True,半選為True,未選中為False

checkState() #查詢狀態,全選為2,半選為1,未選為0

setChecked(True) #設置狀態,True為全選,False為未選中 ,0為未選,1為半選不需要使能半選功能,2為全選

setTristate() #使能按鍵的半選功能,

```

### QDial

```python

valueChanged #值發生改變的信號

```

### QSlider

```python

```

### QPaintert

```python

drawLine(0, 0, self.pos.x(), self.pos.y())# 起點的坐標x,起點的坐標y,終點坐標x,終點坐標y

```

### 信號與槽

```python

#coding=utf-8

import sys

from PyQt5.QtWidgets import (QApplication, QWidget, QMessageBox)

from PyQt5.QtCore import (pyqtSignal, QObject)

class Signal(QObject):

showmouse = pyqtSignal()

class Example(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

self.setGeometry(200, 200, 300, 300)

self.setWindowTitle('學點編程吧')

self.s = Signal()

self.s.showmouse.connect(self.about)

self.show()

def about(self):

QMessageBox.about(self,'鼠標','你點鼠標了吧!')

def mousePressEvent(self, e):

self.s.showmouse.emit()

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = Example()

sys.exit(app.exec_())

```

### 布局

```python

#QHBoxLayout,QVBoxLayout

addWidget(bt) #布局中增加控件

widget.setLayout(vbox)#控件中設置布局

addStretch(1) #控件中增加一個拉繩因子,里面的參數表示QSpacerItem的個數

#QGridLayout

addWidget(控件,0,0,3,0) #哪行,哪列,占多少行,占多少列

#QFormLayout

addRow(控件1,控件2)

```

### 顏色對話框

```python

col = QColorDialog.getColor() #打開顏色對話框,如果選擇的顏色有效,則設置TextEdit問選擇的當前顏色

if col.isValid():

self.tx.setTextColor(col)

```

### 字體對話框

```python

font, ok = QFontDialog.getFont() #打開顏色對話框,如果ok存在表示存在字體

tx.setCurrentFont(font) #TextEdit 設置選擇的字體

```

### 文件對話框

```python

fname = QFileDialog.getOpenFileName(self, '打開文件','./') #打開單個文件

fname = QFileDialog.getOpenFileName(self, '打開文件','./',("Images (*.png *.xpm *.jpg)")) #對打開的文件進行過濾

```

### QProgressDiaglog

```python

QProgressDialog(self)

setWindowTitle("請稍等") #設置標題

setLabelText("正在操作...") #設置內容

setCancelButtonText("取消") #添加按鍵

setWindowModality(Qt.WindowModal) #設置模式

setMinimumDuration(5) #設置最小顯示時間,自動計算花費時間,如果小于設置時間不顯示進度條

setRange(0,num) #進度條的范圍

setValue(i) #設置進度條的值

progress.wasCanceled(): #為True表示關閉進度條

```

#進度條的模式

| 屬性 | 描述 |

| ------------------- | ---------------------------------- |

| Qt.NonModal | 窗口不是模態的,不會阻止到其他輸入 |

| Qt.WindowModal | 單個模態窗口 |

| Qt.ApplicationModal | 所有窗口模態 |

```python

from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel, QLineEdit, QMessageBox, QProgressDialog)

from PyQt5.QtCore import Qt

import sys

class Example(QWidget):

def __init__(self):

super().__init__()

self.initUI()

def initUI(self):

self.resize(300,150)

self.setWindowTitle("微信公眾號:學點編程吧--進度對話框")

self.lb = QLabel("文件數量",self)

self.lb.move(20,40)

self.bt1 = QPushButton('開始',self)

self.bt1.move(20,80)

self.edit = QLineEdit('100000',self)

self.edit.move(100,40)

self.show()

self.bt1.clicked.connect(self.showDialog)

def showDialog(self):

num = int(self.edit.text())

progress = QProgressDialog(self)

progress.setWindowTitle("請稍等")

progress.setLabelText("正在操作...")

progress.setCancelButtonText("取消")

progress.setMinimumDuration(5)

progress.setWindowModality(Qt.WindowModal)

progress.setRange(0,num)

for i in range(num):

progress.setValue(i)

if progress.wasCanceled():

QMessageBox.warning(self,"提示","操作失敗")

break

else:

progress.setValue(num)

QMessageBox.information(self,"提示","操作成功")

if __name__ == '__main__':

app = QApplication(sys.argv)

ex = Example()

sys.exit(app.exec_()

```

### 雜

```python

from PyQt5.QtCore import QCoreApplication

QCoreApplication.instance().quit # QcoreApplication包含主事件循環,它處理和調度所有事件,instance()表示當前的實例。

```

一鍵復制

編輯

Web IDE

原始數據

按行查看

歷史

總結

以上是生活随笔為你收集整理的qtextedit 默认文案_QT中常用的控件说明.md的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。