实验室项目展示用PyQt系列(5)界面的整体控制架构、风格调整

本科毕设被研导要求添加可视化界面展示结果功能以填补实验室的需求,同时需要做好来自MatLab与python的接口。由于实验室大量项目工作在演示时需要使用界面,常有同门前来问询,而此工作中有大量踩坑踩雷需要注意,空口说自然不如图文来的明白完整,故写此系列博客,以避免不必要的时间浪费。

文章并非专业的界面设计教程,唯一写作目的为帮助不希望透彻理解PyQt5的人能够制作界面以回应导师/领导等人的期待,满足教学/项目等需求,为避免误导,以入职软件公司为目的请勿借鉴本博客。

上一篇:实验室项目展示用PyQt系列(4)如何在界面中实现matplotlib图片结果的实时展示

https://blog.csdn.net/pyc0551/article/details/131304021icon-default.png?t=N7T8https://blog.csdn.net/pyc0551/article/details/131304021经过前四节的工作,界面应该已经就位,但具体的跳转、运行逻辑的控制方式暂时还未定义。同时,部分人希望界面能够变为无边框等等风格,这都需要进行调整。

1.界面整体运行逻辑的控制与各个界面的初始化

一个界面通常不会仅有一个页面,即便只在一个窗口内实现,也往往会需要进行跳转、打开对话框等操作。对于界面的跳转,可以使用专门定义的一个控制器类进行控制。

class Controller:
    def __init__(self):
        pass

    def show_MainWin(self):
        self.MainWin = MainEntry()
        self.MainWin.show()

    def show_OMP(self):
        self.OMP_UI = OMPEntry()
        self.MainWin.close()
        self.OMP_UI.show()

    def show_CNN(self):
        self.CNN_UI = CNNEntry()
        self.MainWin.close()
        self.CNN_UI.show()



if __name__ == "__main__":
    app = QApplication(sys.argv)
    controller = Controller()
    controller.show_MainWin()
    sys.exit(app.exec_())

如上代码中,定义了一个用于控制界面显示的控制器,以及主函数的运行逻辑。在界面打开后,各界面进行跳转,主程序依然停在倒数第二行处,界面关闭之后,就会进入最后一行,程序将释放全部内存。

class CNNEntry(QMainWindow, CNN):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

    def gohome(self):
        controller.show_MainWin()
        self.close()

由于主界面在控制器中直接进行了展示,因此在其他界面跳回到主界面的过程中,需要记得将原先界面关闭。另外,界面的初始化在极简情况下只需要运行上述程序。代码如上。

另外,如果界面对鲁棒性有一定要求,在设计时除了基本逻辑之外,用户不遵从逻辑、直接跳过某些步骤按下某些按钮,可能会导致报错、界面直接关闭。因此,除了勤用try之外,还应该对于基本逻辑进行定义。对于较为简单的单线进行操作的界面,一个较为方便的方法是设置一个类内初始化为0的参数,每按照步骤进行一次操作即+1,若在未进行到该步骤的情况下进行某些操作即该参数<该操作所设定的值,则直接不执行命令,避免界面闪退。对于操作逻辑较为复杂的界面,还是老老实实写下判断函数,或参考其他软件设计过程中的方法进行程序的撰写。

2.界面风格的调整

本人在进行设计时,期望使用一种无边框的界面。因此,在各个界面初始化时,都需要增加一行代码如下。

self.setWindowFlags(Qt.FramelessWindowHint)

另外,使用此风格需要自行设计界面的上边栏与关闭按钮,如有需要还可以增加最小化等按钮。窗口全屏功能需要单独进行设计,否则不会自动将固件位置大小调整为适应全屏的分辨率,因此不推荐使用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值