最近开发界面,需要做一个功能: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。