在PyQt中,如何在一单个QMainWindow窗口中显示10个或更多个QTabWidget,每个选项卡包含一个QLabel和一个QTableWidget,如下所示:
[图片]
2. 解决方案
以下代码演示了如何实现上述目标:
import sys
import PyQt5
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建一个QTabWidget
self.tab_widget = QTabWidget()
# 创建10个QWidget作为选项卡
self.tab_list = []
for i in range(10):
widget = QWidget()
self.tab_list.append(widget)
# 为每个选项卡添加标题
for i, widget in enumerate(self.tab_list):
self.tab_widget.addTab(widget, f"SECTION {i + 1}")
# 创建10个QLabel作为选项卡中的标题
self.title_list = []
for i in range(10):
label = QLabel("Title")
self.title_list.append(label)
# 创建10个QTableWidget作为选项卡中的表格
self.table_list = []
for i in range(10):
table = QTableWidget()
self.table_list.append(table)
# 设置表格的列数和表头
for table in self.table_list:
table.setColumnCount(10)
table.setHorizontalHeaderLabels(["ID", "Question", "Answer 1", "Answer 2", "Answer 3", "Difficulty", "Statistics", "Date Added", "Added By", "Date Modified"])
# 将QLabel和QTableWidget添加到选项卡中
for i, widget in enumerate(self.tab_list):
layout = QVBoxLayout()
layout.addWidget(self.title_list[i])
layout.addWidget(self.table_list[i])
widget.setLayout(layout)
# 将QTabWidget添加到主窗口
self.setCentralWidget(self.tab_widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
这将创建一个包含10个选项卡的主窗口,每个选项卡包含一个QLabel和一个QTableWidget。
3. 代码示例
以下代码更进一步,使用循环来创建QTabWidget、QLabel和QTableWidget,从而简化了代码:
import sys
import PyQt5
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建一个QTabWidget
self.tab_widget = QTabWidget()
# 创建10个选项卡
self.tab_list = []
self.title_list = []
self.table_list = []
for i in range(10):
widget = QWidget()
self.tab_list.append(widget)
label = QLabel("Title")
self.title_list.append(label)
table = QTableWidget()
self.table_list.append(table)
# 设置表格的列数和表头
table.setColumnCount(10)
table.setHorizontalHeaderLabels(["ID", "Question", "Answer 1", "Answer 2", "Answer 3", "Difficulty", "Statistics", "Date Added", "Added By", "Date Modified"])
# 将QLabel和QTableWidget添加到选项卡中
layout = QVBoxLayout()
layout.addWidget(label)
layout.addWidget(table)
widget.setLayout(layout)
# 将选项卡添加到QTabWidget中
self.tab_widget.addTab(widget, f"SECTION {i + 1}")
# 将QTabWidget添加到主窗口
self.setCentralWidget(self.tab_widget)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
这种方法更加简洁和高效,并且可以很容易地扩展到更多数量的选项卡。