pyqt5-notes

安装

1
2
3
pip install pyqt5

pip install PyQt5-tools

导入包

1
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,  QPlainTextEdit

常用组件

QApplication

1
2
app = QApplication([])
app.exec_()

通用方法

1
2
window.resize(500, 400)     # 窗口大小
window.move(300, 310) # 初始位置

QMainWindow

1
2
3
window = QMainWindow()
window.setWindowTitle('') # 窗口标题
window.show()

QLineEdit

单行文本

1
2
3
4
text = edit.text()
edit.setPlaceholderText('')
edit.setText('')
edit.clear()

QPlainTextEdit

多行纯文本框

1
2
3
4
5
6
7
textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("")
info = textEdit.toPlainText()

# 获取选中文本
textCursor = edit.textCursor()
selection = textCursor.selectedText()

后续处理

1
2
3
4
for line in info.splitlines():
if not line.strip():
continue
parts = line.split(' ')

QTextBrowser

文本浏览框, 只读。

一般操作同上。

1
2
3
4
5
6
# 添加文本,并跟随光标位置
textBrowser.append('你好,白月黑羽') # 会自动换行
textBrowser.ensureCursorVisible()

# 光标处插入,不会自动换行
edit.insertPlainText('')

QLabel

1
setText()

QComboBox

组合选择框

1
2
3
4
cbox.currentIndexChanged.connect(handleSelectionChange)
cbox.addItem('')
cbox.addItems([])
method = cbox.currentText()

QPushButton

1
2
3
4
5
6
7
8
9
10
11
12
13
button = QPushButton('name', window)
button.clicked.connect(func)
button.setText(text)
button.setEnabled(True)

from PySide2.QtCore import Qt,QSize
from PySide2.QtGui import QIcon

# 设置图标
button.setIcon(QIcon('logo.png'))

# 设置图标大小
button.setIconSize(QSize(30, 30))

QMessageBox

1
2
3
4
5
QMessageBox.about(window,
'统计结果',
f'''薪资20000 以上的有:\n{salary_above_20k}
\n薪资20000 以下的有:\n{salary_below_20k}'''
)

布局

Layout

1
2
3
4
5
6
7
hl = QtWidgets.QHBoxLayout()
vl = QtWidgets.QVBoxLayout()
gl = QtWidgets.QGridLayout()

hl.addWidget(button1) # 添加组件
self.setLayout(hl) # 设置布局
layout.addLayout(hl) # 添加子布局

centralWidget

QMainWindow 的中央控件

1
2
3
4
5
# 设置 QMainWindow centralWidget 布局
centralWidget = QtWidgets.QWidget(self)
self.setCentralWidget(centralWidget)

mainLayout = QtWidgets.QVBoxLayout(centralWidget)

窗口切换

一个思路是用两个类,初始化另一窗口,关闭当前窗口。

1
2
3
4
5
6
7
def open_new_window(self):
# 实例化另外一个窗口
self.window2 = Window2()
# 显示新窗口
self.window2.show()
# 关闭自己
self.close()

另一思路用hide()隐藏窗口。

弹出模式对话框

使用 QDialog 组件,打开后会阻塞父窗口,关闭后恢复。

1
2
dlg = MyDialog()     
dlg.exec_()

常用信号

1
2
3
4
clicked
textChanged
returnPressed # 回车键
cursorPositionChanged # 光标位置改变