PyQt QTab 小组件
如果一个表单有太多的字段需要同时显示,它们可以被安排在不同的页面中,放在一个Tabbed Widget的每个标签下。QTabWidget提供了一个标签栏和一个页面区域。第一个标签下的页面被显示,其他的则被隐藏。用户可以通过点击所需的标签来查看任何页面。
下面是QTabWidget类中一些常用的方法。
下面给出了QTabWidget最常用的方法。
序号 | 方法和描述 |
---|---|
1 | addTab() 添加一个与小组件页面相关的标签。 |
2 | insertTab() 在所需位置插入一个与页面相关的标签。 |
3 | removeTab() 删除指定索引的标签 |
4 | setCurrentIndex() 将当前可见页面的索引设为当前索引。 |
5 | setCurrentWidget() 将可见页面设为当前页面 |
6 | setTabBar() 设置小组件的标签栏 |
7 | setTabPosition() 标签的位置由值控制 QTabWidget.North在页面上方 QTabWidget.South在页面下方 QTabWidget.West在页面左边 QTabWidget.East在页面右边 |
8 | setTabText() 定义与标签索引相关的标签 |
以下是与QTabWidget对象相关的信号—-。
序号 | 方法和描述 |
---|---|
1 | currentChanged() 每当当前页面索引发生变化时 |
2 | tabClosedRequested() 当标签上的关闭按钮被点击时 |
例子
在下面的例子中,一个表单的内容被分成了三个类别。每组小工具都在不同的标签下显示。
顶层窗口本身是一个QTabWidget。三个标签被添加到它里面。
self.addTab(self.tab1,"Tab 1")
self.addTab(self.tab2,"Tab 2")
self.addTab(self.tab3,"Tab 3")
每个标签显示一个使用布局设计的子表单。标签文本由报表改变。
self.setTabText(0,"Contact Details")
self.setTabText(1,"Personal Details")
self.setTabText(2,"Education Details")
完整的代码如下-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class tabdemo(QTabWidget):
def __init__(self, parent = None):
super(tabdemo, self).__init__(parent)
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tab3 = QWidget()
self.addTab(self.tab1,"Tab 1")
self.addTab(self.tab2,"Tab 2")
self.addTab(self.tab3,"Tab 3")
self.tab1UI()
self.tab2UI()
self.tab3UI()
self.setWindowTitle("tab demo")
def tab1UI(self):
layout = QFormLayout()
layout.addRow("Name",QLineEdit())
layout.addRow("Address",QLineEdit())
self.setTabText(0,"Contact Details")
self.tab1.setLayout(layout)
def tab2UI(self):
layout = QFormLayout()
sex = QHBoxLayout()
sex.addWidget(QRadioButton("Male"))
sex.addWidget(QRadioButton("Female"))
layout.addRow(QLabel("Sex"),sex)
layout.addRow("Date of Birth",QLineEdit())
self.setTabText(1,"Personal Details")
self.tab2.setLayout(layout)
def tab3UI(self):
layout = QHBoxLayout()
layout.addWidget(QLabel("subjects"))
layout.addWidget(QCheckBox("Physics"))
layout.addWidget(QCheckBox("Maths"))
self.setTabText(2,"Education Details")
self.tab3.setLayout(layout)
def main():
app = QApplication(sys.argv)
ex = tabdemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
上述代码产生了以下输出 —