PyQt常用控件

QLineEdit

生成控件

widget = QLineEdit()

设置输入框文字

widget.setText('some text')

设置提示文字

widget.setPlaceholderText('some text')

设置输入框为只读

widget.setReadOnly(True)

设置输入框内容长度限制

widget.setMaxLength(10)

设置输入框为内容为非明文

widget.setEchoMode(QLineEdit.password)

设置输入框下拉提示选项列表

1
2
3
my_list = ['aa1', 'aa2', 'aa3']
completer = QCompleter(my_list)
widget.setCompleter(completer)

QPushButton

生成控件

bt = QPushButton('push')

给按钮设置图标

bt.setIcon(QIcon('icon.png'))

给按钮关联命令

bt.clicked.connect(func_name)

QCheckBox

生成控件

ck = QCheckBox('check')

设置默认为勾选状态

ck.setChecked(True)

返回是否勾选

ck.isChecked()

返回勾选框文字

ck.text()

QListWidget

生成控件

listWidget = QListWidget()

添加一个元素

listWidget.addItem('abc')

添加一个一堆元素

listWidget.addItems(['a1', 'b2', 'c3', 'd4'])

插入元素

listWidget.insertItem(1, 'b1')

给元素设置图标

1
2
3
item = QListWidgetItem('test')
item.setIcon(QIcon('icon.png'))
listWidget.addItem(item)

给元素进行排序

listWidget.sortItems()

设置默认被选中的行

listWidget.setCurrentRow(1)

设置间隔行颜色区分

listWidget.setAlternatingRowColors(True)

设置行多选

listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)

获取行总数

listWidget.count()

获取指定行的文字

listWidget.item(1).text()

获取当前选择行的文字

listWidget.currentItem().text()

获取被选中的行,返回列表

listWidget.selectedItems()

QTableWidget

生成控件

tableWidget = QTableWidget(5,7)

设置行数

tableWidget.setRowCount(5)

设置列数

tableWidget.setColumnCount(7)

设置表头名称

tableWidget.setHorizontalHeaderLabels(['Project', 'Sequence', 'Shot', 'Task'])

获取表格的总行数

tableWidget.rowCount()

给指定格添加数据

1
2
3
4
item = QTableWidget('test')
row = 5
column = 2
tableWidget.setItem(row, column, item)

插入行,插入列

1
2
tableWidget.insertRow(2)
tableWidget.insertColumn(1)

删除行,删除列

1
2
tableWidget.removeRow(0)
tableWidget.removeColumn(2)

隐藏行

tableWidget.hideRow(0)

清除表格内容(只清除数据,不包括表头)

tableWidget.clearContents()

清除所有表格内容

tableWidget.clear()

更改指定列表头的内容

tableWidget.setHorizontalHeaderItem(4, QTableWidgetItem('Step'))

设置表格的内容为勾选框

tableWidget.setCellWidget(1, 2, QCheckBox())

设置表格为单选模式

tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)

设置选择单元格模式,为选取一行

tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)

设置表格不可编辑

tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)

设置指定单元格不可编辑

1
2
item = tableWidget.item(2, 3)
item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)

为指定行设置行高

tableWidget.setRowHeight(0, 20)

给表格排序(以第二列倒序排序)

tableWidget.sortByColumn(1, Qt.DescedingOrder)

隐藏表格网格

tableWidget.setShowGrid(False)

隐藏表格行数序号

tableWidget.verticalHeader().setVisible(False)

获取指定单元格内容

tableWidget.item(2, 3).text()

QTreeWidget

生成控件

treeWidget = QTreeWidget()

设置列数

treeWidget.setColumnCount(2)

设置表头

treeWidget.setHeaderLabels(['Shots', 'describe'])

添加一个root目录

1
2
3
4
root = QTreeWidgetItem()
root.setText(0, 'shot_0100')
root.setText(1, 'full cg shot')
treeWidget.addTopLevelItem(root)

为root添加子目录

1
2
3
4
item1 = QTreeWidgetItem()
item1.setText(0, 'Layout')
item1.setText(1, 'Done')
root.addChild(item1)

设置自动展开

treeWidget.expandAll()

设置展开开启动画效果

treeWidget.setAnimated()

设置root目录扩展整行

treeWidget.setFirstItemColumnSpanned(root, True)

设置行高,及颜色

1
2
root.setSizeHint(0, QSize(50, 50))
root.setBackgroumd(0, QColor(150, 0, 0))

QGroupBox

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from PySide2.QtWidgets import *
from PySide2.QtCore import *
import sys

app = QApplication(sys.argv)
widget = QWidget()
main_layout = QVBoxLayout()
layout1 = QHBoxLayout()
for i in range(3):
layout1.addWidget(QCheckBox('click'))
group1 = QGroupBox('my check box')
group1.setLayout(layout1)

layout2 = QHBoxLayout()
for i in range(3):
layout2.addWidget(QPushButton('push me'))
group2 = QGroupBox('button group')
group2.setLayout(layout2)

main_layout.addWidget(group1)
main_layout.addWidget(group2)
widget.setLayout(main_layout)
widget.show()
app.exec_()

QTabWidget

生成控件

1
2
3
4
5
6
7
8
9
10
11
12
app = QApplication(sys.argv)
tabWidget = QTabWidget()

widget1 = QLineEdit('typing')
widget2 = QCheckBox('click')
widget3 = QPushButton('push')

tabWidget.addTab(widget1, 'my line edit')
tabWidget.addTab(widget2, 'my check box')
tabWidget.addTab(widget3, 'my button')
tabWidget.show()
app.exec_()

设置标签可移动

tabWidget.setMoveble(True)

设置标签关闭按钮

tabWidget.setTabsClosable(True)

设置指定标签图标

tabWidget.setTabIcon(0, 'icon.png')

QMenu

简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PySide2.QtWidgets import *
from PySide2.QtCore import *
import sys

app = QApplication(sys.argv)
window = QMainWindow()

menuBar = window.menuBar()

fileMenu = QMenu('File')

newAction = QAction('New')
openAction = QAction('Open')
saveAction = QAction('Save')

fileMenu.addAction(newAction)
fileMenu.addAction(openAction)
fileMenu.addAction(saveAction)

menuBar.addMenu(fileMenu)
window.show()
app.exec_()

Action关联命令

saveAction.triggered.connect(my_command)

Action设置快捷键

saveAction.setShortcut('Ctrl+S')

Action设置图标

saveAction = QAction(QIcon('icon.png'), 'new')

为Menu一次添加多个Action

fileMenu.addActions([newAction, openAction, saveAction])

添加子菜单

fileMenu.addMenu(SecondMenu)

添加分割线

fileMenu.addSeparator()

右键菜单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from PySide2.QtWidgets import *
from PySide2.QtGui import *
from PySide2.QtCore import *
import sys


class Window1(QWidget):

def __init__(self):
super(Window1, self).__init__()
self.contextMenu = QMenu(self)

newAction = QAction('New', self)
openAction = QAction('Open', self)
saveAction = QAction('Save', self)

self.contextMenu.addAction(newAction)
self.contextMenu.addAction(openAction)
self.contextMenu.addAction(saveAction)

# 设置右键点击菜单为自定义菜单
self.setContextMenuPolicy(Qt.CustomContextMenu)
# 关联右键自定义显示菜单函数
self.customContextMenuRequested.connect(self.showContextMenu)

def showContextMenu(self):
# QCursor.pos() 返回鼠标的位置
self.contextMenu.move(QCursor.pos())
self.contextMenu.show()


app = QApplication(sys.argv)
widget = Window1()
widget.show()
app.exec_()

QFileDialog

选择文件对话框

QFileDialog.getOpenFileName()

选择多个文件对话框

QFileDialog.getOpenFileNames()

选择目录对话框

QFileDialog.getExistingDirectory()

获取保存文件的对话框

QFileDialog.getSaveFileName()

QColorDialog

获取颜色选择对话框

QColorDialog.getColor()

QFontDialog

获取字体选择对话框

QFontDialog.getFont()

QInputDialog

文字输入框

QInputDialog.getText(self, 'title', 'my text')

整数输入框

QInputDialog.getInt()

小数输入框

QInputDialog.getDouble()

列表选择对话框

1
2
3
items = ['square', 'triangle', 'circle']
#参数: 1 为默认选择第一个值, False为禁止编辑
QInputDialog.getItem('get', 'item:', items, 1, False)

QMessageBox

询问对话框

QMessageBox.question('question', 'Are u sure?', QMessageBox.Yes|QMessageBox.No)

提示对话框

QMessageBox.information('information', 'niubi!')

警告对话框

QMessageBox.warning('warning', 'its wrong!')

错误对话框

QMessageBox.critical('critical', 'dont do this!')

关于对话框

QMessageBox.about('about', 'About lingyunfx')

消息对话框示例

1
2
3
4
5
6
7
8
9
10
11
12
message = QMessageBox(self)
message.setWindowTitle('message')
message.setText('my name is hanmm')
message.setIcon(QMessageBox.information)
message.setStandardButtons(QMessageBox.Ok|QMessageBox.No)
message.setDefaultButton(QMessageBox.No)
message.setDetailedText('this is detail') # 显示详述
message.addButton('custom', QMessageBox.YesRole) # 添加自定义按钮

# 返回点击button的文字
result = message.clickedButton()
print button.text()