PYQT5如何实现radio和tabwidget的互相联动,点击radio切换tabwidget

news/2025/1/17 13:54:43/

最近开发界面,需要做一个功能:tabwidget下面有两个界面,对应两个radio,在我点击一个radio的时候,底下的页面也会随之跳转。
分为几个步骤:
1、将两个radio独立,就是点其中一个的时候,另外一个无法被选中:只要将两个radio放在一个水平布局里面就可以了,如下所示。
在这里插入图片描述
2、弄一个tabwidget并把买个页面填写完整,这个教程很多,就不赘述了。
3、两者联动,算了,直接上代码吧:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QTabWidget, QVBoxLayoutclass MainWindow(QWidget):def __init__(self):super().__init__()self.radio_button1 = QRadioButton("选项卡1")self.radio_button2 = QRadioButton("选项卡2")self.radio_button1.setChecked(True)self.tab_widget = QTabWidget()self.tab_widget.addTab(QWidget(), "选项卡1")self.tab_widget.addTab(QWidget(), "选项卡2")self.radio_button1.toggled.connect(self.on_radio_button_toggled)self.radio_button2.toggled.connect(self.on_radio_button_toggled)layout = QVBoxLayout()layout.addWidget(self.radio_button1)layout.addWidget(self.radio_button2)layout.addWidget(self.tab_widget)self.setLayout(layout)def on_radio_button_toggled(self, checked):sender = self.sender()if checked:if sender == self.radio_button1:self.tab_widget.setCurrentIndex(0)elif sender == self.radio_button2:self.tab_widget.setCurrentIndex(1)if __name__ == '__main__':app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

上述代码可以实现点击radio就可以跳转对应的选项卡
但是会出现一个bug,就是你的tabwidget选项卡是可以自己选择的,导致你选择tabwidget的选项卡时,对应的radio并没有反应,要解决这个问题,其实很简单,就是把tabwidget的选择选项卡的功能禁用掉。
修改后的代码如下:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QTabWidget, QVBoxLayoutclass MainWindow(QWidget):def __init__(self):super().__init__()self.radio_button1 = QRadioButton("选项卡1")self.radio_button2 = QRadioButton("选项卡2")self.radio_button1.setChecked(True)self.tab_widget = QTabWidget()self.tab_widget.addTab(QWidget(), "选项卡1")self.tab_widget.addTab(QWidget(), "选项卡2")self.tab_widget.setTabEnabled(1,False)self.radio_button1.toggled.connect(self.on_radio_button_toggled)self.radio_button2.toggled.connect(self.on_radio_button_toggled)layout = QVBoxLayout()layout.addWidget(self.radio_button1)layout.addWidget(self.radio_button2)layout.addWidget(self.tab_widget)self.setLayout(layout)def on_radio_button_toggled(self, checked):sender = self.sender()if checked:if sender == self.radio_button1:self.tab_widget.setTabEnabled(0,True)self.tab_widget.setTabEnabled(1,False)self.tab_widget.setCurrentIndex(0)elif sender == self.radio_button2:self.tab_widget.setTabEnabled(1,True)self.tab_widget.setTabEnabled(0,False)self.tab_widget.setCurrentIndex(1)if __name__ == '__main__':app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

在这里插入图片描述
此时选项卡1已经是无法选中了,有效去除了bug。


http://www.ppmy.cn/news/1202554.html

相关文章

2023年最热门的五大编程技术趋势

2023年最热门的五大编程技术趋势 摘要:本文将介绍2023年最热门的五大编程技术趋势,包括人工智能、区块链、WebAssembly、5G和边缘计算以及自动化。我们将详细讨论这些趋势的当前状态、未来展望以及如何利用这些技术来提高您的编程技能。 一、前言 随着…

​借助CRM销售管理软件加速客户成交

对于很多企业而言售出自己的产品不是一件容易的事,尤其对于做B端业务的企业。可以说缩短成单周期就等同于业绩的增长,有什么好的方法呢?如果您希望做出改进,不妨试试借助CRM销售管理软件加速客户成交。 精细化线索管理 利用CRM打…

linux boot阶段内存分配(x86)

x86中没有boot memory allocator,是用 memblock 来分配的。 memblock有memory 与reserved两种类型,它们的内存是静态内存,不需要用memblock本身去维护,它们被标记为__initdata_memblock,会在boot结束后(fre…

数据结构——B树

文章目录 B树1. 概念2. B树插入分析3.插入过程4. B树插入实现5.B树验证6. B树性能分析7.B树&B*树8. 小结9. B树的运用MyISAMInnoDB 10. 总结 B树 可以用于查询的数据结构非常的多,比如说二插搜索树、平衡树、哈希表、位图、布隆过滤器,但如果需要存…

网页错误代码简便记忆

HTTP1xx-信息提示 2xx-成功 3xx-重定向 4xx-客户端错误 5xx-服务器错误

js 中的 map

文章目录 需求分析 需求 熟悉了解 map 使用 分析 下面是一个JavaScript中使用Map的示例: // 创建一个新的Map对象 var myMap new Map();// 向Map中添加元素 myMap.set(key1, value1); myMap.set(key2, value2); myMap.set(key3, value3);// 从Map中获取元素 co…

【网络编程】传输层——TCP协议

文章目录 TCP协议TCP协议格式窗口大小六个标志位确认应答机制超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议TCP与UDP的对比 TCP相关实验CLOSE_WAIT状态实验TIME_WAIT状态实验TI…

Mysql有多少种常见的日志,分别解释日志的作用

redo 重做日志 作用:确保事务的持久性,防止在发生故障,脏页未写入磁盘。重启数据库会进行redo log执行重做,到达事务一致性 undo 回滚日志 作用:保证数据的原子性,记录事务发生之前的数据的一个版本&#…