PyQt5的使用

PyQt5 是Digia的一套Qt5应用框架与python的结合,是最强大的GUI库之一。PyQt5是由一系列Python模块组成,本文对开发过程中经常用到的模块进行说明。

QtDesigner的配置和使用

Qt Designer是一款很方便使用的界面设计工具,通过简单的拖拽和配置,就可以设计出优美的界面。使用pip工具安装pyqt和pyqt-tools安装包。

pip install pyqt5
pip install pyqt5-tools


Qt Designer工具放在\Lib\site-packages\qt5_applications\Qt\bin目录下面,启动的文件是designer.exe。可以通过命令行的运行方式启动:

pyqt5-tools.exe designer

为了使用方便,也可以创建designer.exe文件的快捷方式到桌面,使用时更方便。

使用qt designer工具设计UI界面完成之后,保存以ui为后缀的文件。然后通过pyuic5工具转换ui文件到py格式的文件,-o后面跟的参数是生成文件的名称,第二个参数是设计生成的ui文件,转换的py文件可以直接在python的工程中使用。

 pyuic5 -o .\test.py .\test.ui

常用控件

QTableWidget

基本接口的使用

self.table_result = QtWidgets.QTableWidget()
self.table_result.setObjectName("测试成绩")
#显示表头
self.table_result.verticalHeader().setVisible(True)
self.table_result.horizontalHeader().setVisible(True)
#显示列数、行数
self.table_result.setColumnCount(8)
self.table_result.setRowCount(0)
#表格不可以编辑
self.table_result.setEditTriggers(QTableView.NoEditTriggers)
#整行选中
self.table_result.setSelectionBehavior(QAbstractItemView.SelectRows)
#表头自动排序
self.table_result.setSortingEnabled(True)
#设置表头项目的名称
self.table_result.setHorizontalHeaderLabels(
    ["测试编号", "测试成绩1", "测试成绩2", "测试成绩3", "测试成绩4", "测试成绩5", "测试成绩6", "测试成绩"]
#设置列的宽度
self.table_result.setColumnWidth(0, 110)

可以设置的属性,QTableWidget是QTableView的子类,属性是继承QTableView类的。具体属性的查看可以通过官方网站进行查找。

Qt Style Sheets Reference 

部分属性如下:

#整个表格的属性
QTableView
    border: 1px solid #76797C;
    gridline-color: #31363b;
    background-color: #232629;
#表格item选中状态
QTableView::item:pressed {
    background: #18465d;
    color: #eff0f1;
#表头的属性
QHeaderView
    background-color: #31363b;
    border: 1px transparent;
    border-radius: 0px;
    margin: 0px;
    padding: 0px;
#表头的每个项目的属性设置
QHeaderView::section  {
    background-color: #31363b;
    color: #eff0f1;
    padding: 5px;
    border: 1px solid #76797C;
    border-radius: 0px;
    text-align: center;
}

代码中的设置方法如下:

self.table_result.horizontalHeader().setStyleSheet("QHeaderView::section{background-color: rgb(10, 64, 90);}")
self.table_result.setStyleSheet("QTableWidget{border-width:1px;border-style:solid;gridline-color: rgb(8, 39, 58)}")

QHBoxLayout 水平布局

info_layout = QHBoxLayout()
self.type_label = QLabel("类型", self)
self.type_combox = QComboBox()
self.type_combox.addItems(["选项1", "选项2"])
self.min_value_label = QLabel("最小值", self)
self.min_value = QLineEdit()
self.max_value_label = QLabel("最大值", self)
self.max_value = QLineEdit()
self.info_save = QPushButton("保存")
info_layout.addWidget(self.type_label)
info_layout.addWidget(self.type_combox)
info_layout.addStretch(1)
info_layout.addWidget(self.min_value_label)
info_layout.addWidget(self._min_value)
info_layout.addStretch(1)
info_layout.addWidget(self.max_value_label)
info_layout.addWidget(self.max_value)
info_layout.addStretch(1)
info_layout.addWidget(self.info_save)
info_layout.addStretch(4)

本例中创建了一个水平布局,然后在里面放入几个控件,通过addWidget将控件加入到水平布局中,addStretch用于控制控件之间的间隔。同理,垂直布局的使用方式相同。

QToolBox

QToolBox是一个常用的容器控件,用于集成一些水平或垂直布局来实现复杂的布局。方法是先创建一个toolbox控件,然后可以设置toolbox的一些属性,本例中设置了高度是80。创建一个qwidget布局,然后加入上面例子中info_layout,最后在toolbox控件上加入一个新的项。重复多次加入item,就得到一个toolbox控件树,可以方便的管理各个项目。

self.toolbox = QtWidgets.QToolBox(self)
self.toolbox.setMaximumHeight(80)
info_widget = QWidget()
info_widget.setLayout(info_layout)
self.toolbox.addItem(info_widget, "新增信息")

控件使用经验总结

尽量的多使用qt designer工具进行界面设计,然后在代码中进行微调。容易出现问题的大致就是上面的几个控件,其他控件可以通过资料的查询可以迅速的搞定。另外最头疼的应该是样式的修改,在开发中可能会占用较多的时间去调试效果,下面的小节将介绍一种简单的方式。

属性设置的方式

使用setStyleSheet接口,可以设置整个QtWidgets.QApplication对象的样式,也可以通过单个控件的设置方式,为了统一管理方便,应该采用前者。采用每个控件设置的方式,不容易维护,如果后面要修改的话,每个相同控件的界面代码都需要修改。

#QApplication的设置方式
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())