PYQT5侧边栏选项卡的实现

个人对 PyQt的看法

PyQt,顾名思义是一个python的Qt类库。尽管传统PC端界面设计逐渐式微的今天,Qt依然有着生命力。作为Python的几种流行的图形界面之一,它的功能比tkinter更强大,界面也更好看。配合qtdesigner,能够大大提升开发效率。

入门开发的一些建议

虽然流行教程上,推荐的ide是Eric,但是,我个人更支持使用Pycharm+anaconda。当自己不熟悉相关方法的时候,自动补全功能可以提示自己很多内容。
刚入门时推荐在windows或者macos上开发,这样可以减少很多字库和输入法上的奇怪bug。

能做什么

PyQt的框架可以在安卓手机上通过Pydroid编译运行,但是至于打包成.apk,还是挺有困难的。不过在win上,它还是比较方便打包成.exe的。

问题1:怎样实现选项卡效果?

很显然,Pyqt的tab控件能够让自己完成这个功能。然而,现在的应用界面一般是这样的画风:
竖直排列的选项卡用来切换不同的功能页面(比如qq音乐);
在这里插入图片描述

水平排列的选项卡用来切换相同功能、不同内容的界面(比如浏览器,刚才qq音乐的“本地和下载”这几个字下面也是选项卡)
浏览器:选项卡为水平排布,不同页面(对于浏览器来说),控件是一样的,只有内容不同。
上图浏览器:选项卡为水平排布,不同页面(对于浏览器来说),控件是一样的,只有内容不同。

在qt designer里面,自然可以设定选项卡的方向。但是如果只是简单地设置选项卡方位为West(左侧),你拥有看到文字旋转90度的全新体验。

怎么办呢?
网上大佬的做法大概有两种。第一种使用QPainter来绘制字体,第二种是干脆不使用选项卡结构。
我想了想,使用了第二种方法。
在这里插入图片描述
小红框处是一个QListWidget,大红框是一个QStackedWidget.

按下Crtl+R使得QtDesigner进入预览模式。此时,QStackedWidget的右上角会出现一个双箭头,点击切换不同页面。这是因为在qt设计师软件中,QStackedWidget本身并未绑定任何切换逻辑,只能通过点击两个三角切换状态(下图)

在这里插入图片描述
而实际运行时,这两个三角是不会出现的。

绑定事件

因此我们怎样做呢?当然是绑定事件!
最简单的方法是在Qt设计师中让QStackedWidget的每一页的索引,分别与左侧QListWidget的索引对应相同。比如下图“待办事项”一页的索引就是0,对应左侧QListWidget的第一项。
在这里插入图片描述

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)     
        
        self.sel.itemClicked.connect(self.switch_stack)
        self.sel.setCurrentRow(0)
        self.switch_stack()
    def switch_stack(self):
        try:
            i = self.sel.currentIndex().row()
            self.stackedWidget.setCurrentIndex(i)
        except:
           pass

sel是左边的QListWidget的名字,stackedWidget是QStackedWidget的名字。

下一步是什么?当然是编辑样式表(我刚刚展示的图片,都是样式表编辑完成的效果,毕竟不想把自己干的活重来一遍······)

编辑样式表

主要针对QlistWidget.
QListWidget#sel{
    outline: 0px;
    border:0px;
    min-width: 120px;
    color: Black;
    background: #F5F5F5;
}

QListWidget#sel::Item{
     height:30px;
}
QListWidget#sel::Item:selected {
    background: rgb(49, 194, 124);
    border-radius:1.5px;
   
}

于是,侧向选项卡的效果就做完啦!

  • 16
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值