使用Pyqt5过程中遇到的一些问题

  之前想用Python做一个UI,比较了一些包,发现Pyqt5可以使用图形化工具QtDesigner将页面做好再转换成代码再在上面做修改,感觉比从零开始写代码简单就了解了一下,所以在这里整理了一些我做UI的时候遇到的问题,希望可以帮助到遇到相同问题的人。

  一、让UI不用弹出新的窗口就能切换页面

    这个我找了很多资料都是弹出一个新的窗口这种方式来操作新页面的,我不太喜欢这种方式,就研究了一下,解决办法如下:

      1、创建一个主界面上面就定义菜单和一个布局,让这个布局封盖整个主界面,定义好大小。

      2、创建其他页面,其他页面的大小和主界面上的大小一样。

      3、菜单上创建action,action具体执行的就是将创建的其他界面加载到主界面的布局里。

      4、这样写有个缺陷就是用不了QThreading,用这个必须是实例化后主界面加载了,这样动态加

       载了要想使用多线程就需要使用threading。

    具体的过程见图片和代码,代码我只给出关键的几句,理清思路就可以了,生成的代码太多没法全部

    粘贴,影响博客的整理布局,下面的图片是Q他Designer上做的。                                               

                         

                         

                        

from MainWindow import Ui_MainWindow
from QueryByTime import Ui_QueryByTime
from BuildDUTType import Ui_BuildDUTType

class MainUI(QMainWindow,Ui_MainWindow):
    def __init__(self,parent=None):
        super(MainUI,self).__init__(parent)
        self.setupUi(self)
        self.mainWindow = Ui_MainWindow()
        self.buildDUTType = BuildDUTType()
        self.gridLayout.addWidget(self.buildDUTType,1,0)          
     self.actionNewDUTType.triggered.connect(self.changeBuildDUTTypePage)
     self.actionQueryByTime.triggered.connect(self.changeQueryByTimePage)

def changeBuildDUTTypePage(self):
        for i in range(self.gridLayout.count()):
            self.gridLayout.itemAt(i).widget().deleteLater()
        self.buildDUTType = BuildDUTType()
        self.gridLayout.addWidget(self.buildDUTType,1,0)

def changeQueryByTimePage(self):
        for i in range(self.gridLayout.count()):
            self.gridLayout.itemAt(i).widget().deleteLater()
        self.queryByTime = QueryByTime()
        self.gridLayout.addWidget(self.queryByTime,1,0)

  二、如果使用treeView做左边框,下拉列表中的叶子节点为勾选,让UI在第二次打开的时候保持上一次关

    闭的勾选结果。

    这个我网上找了个大概最终做到了,能够选,但是保持不了结果,所以我单独研究了一下。

      1、勾选复选框的时候让他触发事件,触发后将记录保存在某个地方,我是使用sqlite,在sqlite

        中创建了一张表建了个字段,通过修改和识别这个字段的值来判断复选框的状态。

      下面我只给出一些主要的相关代码。

                     

self.model = QtGui.QStandardItemModel(self)
self.model.setHorizontalHeaderLabels(['PathParameter', 'Common'])
itemOffline
= QtGui.QStandardItem('Offline') itemOffline.setCheckable(True) itemWol.appendRow(itemOffline) itemWol.setChild(1, 1, QtGui.QStandardItem('离线')) if self.isChecked(data[0],data[j*4+1],data[j*4+2][i],'Offline') == True: itemOffline.setCheckState(Qt.Checked) self.model.itemChanged.connect(self.handlePathToGlobalInfo) def handlePathToGlobalInfo(self, item): message = '' current = item.index() projectName = current.parent().parent().parent().data() dutType = current.parent().parent().data() operationName = current.parent().data() modelName = current.data() sqlList1 = ["update table_logPath_info set enable = '1' where projectName = '" + projectName + "' and DUTType = '" + dutType + "' and operationName = '" + operationName + "' and modelName = '" + modelName + "'"] sqlList2 = ["update table_logPath_info set enable = '0' where projectName = '" + projectName + "' and DUTType = '" + dutType + "' and operationName = '" + operationName + "' and modelName = '" + modelName + "'"] if item.checkState() == QtCore.Qt.Checked: message = self.dbTool.executeNoQuery(sqlList1) else: message = self.dbTool.executeNoQuery(sqlList2)

 

posted on 2021-02-23 11:22  1548562170  阅读(351)  评论(0编辑  收藏  举报