界面开发
- 需求
- 开发思路
- 开发过程
- QTreeWidget
- 问题
- 1、item文本如果过长,显示不完全,出现省略号
- 开发
- 1、获取当前鼠标选中的行,进而显示对应的属性
- QStackedWidget:堆栈窗体
- 总结
需求
开发一个界面,用于配置具体功能属性,最终生成自己想要的c代码。
具体要求:
- 左侧是具体大类栏,如:IO,ADC,PWW
- 右侧为具体属性栏,如:名称,…
- 选择某一具体条目时,显示对应的属性配置
实现的效果:以Davinci为例
涉及用到模块:
- QMenuBar
- QMenu
- QAction
- QTreeWidget
- QStackedWidget
- QWidget
- QLable
- QLineEdit
- QXomboBox(下拉盒)
- Frame
开发思路
- 图形开发基本是置顶而下的,从顶层往下设计
- 代码开发也借鉴图形开发方式,采用继承方式,逐一往下开发
- 为了便于开发,可以采用qt designer和代码开发这两者方式结合开发
图形用于调整界面,代码用于方便补充内容
开发过程
实现方法:
- 1、当单击左边的QTreeWidget时
- 2、处理单击事件:获取当前行,并调用setCurrentIndex来显示QStackedWidget具体窗口
- 3、可以采用QFormLayout属性,在QStackedWidget窗口内可以添加具体内容
- 4、QFormLayout是垂直布局属性(QVBoxLayout),便于软件逐行添加,执行formLayout.addRow(“名称”,“…”)
QTreeWidget
问题
1、item文本如果过长,显示不完全,出现省略号
解决方法:
加大MinimumSectionSize的值,比如100等
参考:PyQt5中设置QtreeWidget水平滚动条
开发
1、获取当前鼠标选中的行,进而显示对应的属性
class Ui_MainWindow(object):def setupUi(self, MainWindow):'''#....'''self.IOHW_QTreeWidget.clicked.connect(self.onClicked)def onClicked(self):item = self.IOHW_QTreeWidget.currentItem()if item.parent():#它的父类存在print(item.text(0))#自己的内容print(item.parent().text(0))if item.parent().text(0) == "IO":self.stackedWidget.setCurrentIndex(self.stackedWidget.indexOf(self.page_IO))if item.parent().text(0) == "ADC":self.stackedWidget.setCurrentIndex(self.stackedWidget.indexOf(self.page_ADC))if item.parent().text(0) == "PWM":self.stackedWidget.setCurrentIndex(self.stackedWidget.indexOf(self.page_PWM))if item.parent().text(0) == "test":self.stackedWidget.setCurrentIndex(self.stackedWidget.indexOf(self.page_test))
QStackedWidget:堆栈窗体
-
插入窗体
-
在堆栈窗体的某一窗体内放入布局窗体(QFormLayout),并设置成垂直布局(QVBoxLayout)
-
窗体相关生成的代码:
self.page_test = QtWidgets.QWidget() #1、创建的窗体page_testself.page_test.setObjectName("page_test")self.verticalLayout_page_test = QtWidgets.QVBoxLayout(self.page_test) #2、将page_test窗体设置成垂直布局self.verticalLayout_page_test.setObjectName("verticalLayout_page_test")self.formLayout_page_test = QtWidgets.QFormLayout() #3、创建布局self.formLayout_page_test.setObjectName("formLayout_page_test")self.verticalLayout_page_test.addLayout(self.formLayout_page_test) #4、将布局添加到垂直布局中self.stackedWidget.addWidget(self.page_test) #5、将page_test窗体添加到堆栈窗体内
效果:
- 手动添加的代码,补充内容
'''# 手动添加,方便开发'''# 在page_test中添加行编辑器self.page_test.edit1 = QtWidgets.QLineEdit()#定义self.formLayout_page_test.addRow('整数校验', self.page_test.edit1)#添加# 在page_test中添加下拉编辑器self.page_test.combo_box = QtWidgets.QComboBox()#定义self.page_test.combo_box.addItems(['Option1', 'Option2', 'Option3'])#下拉值self.formLayout_page_test.addRow('整数校验2', self.page_test.combo_box)#添加
总结
- 用Qt Designer每次更新UI再用PyUic更新成.py文件时,.py文件总是覆盖自己添加的代码
解决方法就是用继承父类的方法,采用继承方法
python类的继承