PyQt 多个 tablewidgets 和 tabwidgets
Posted
技术标签:
【中文标题】PyQt 多个 tablewidgets 和 tabwidgets【英文标题】:PyQt multiple tablewidgets and tabwidgets 【发布时间】:2013-10-24 01:28:31 【问题描述】:我的目标是在单个 QMainWindow
中显示 10 个或更多 QTabWidget
,每个选项卡都包含一个唯一的 QLabel
和 QTableWidget
。像这样的:
尽管我设法通过使用以下代码获得了预期的结果,但我想知道是否有更有效的方法或更短的方法来实现相同的结果。
Tab = QtGui.QTabWidget()
Tab1 = QtGui.QWidget()
Tab2 = QtGui.QWidget()
Tab3 = QtGui.QWidget()
Tab4 = QtGui.QWidget()
Tab5 = QtGui.QWidget()
Tab6 = QtGui.QWidget()
Tab7 = QtGui.QWidget()
Tab8 = QtGui.QWidget()
Tab9 = QtGui.QWidget()
Tab10 = QtGui.QWidget()
Tab.addTab(Tab1, QtCore.QString('SECTION A'))
Tab.addTab(Tab2, QtCore.QString('SECTION B'))
Tab.addTab(Tab3, QtCore.QString('SECTION C'))
Tab.addTab(Tab4, QtCore.QString('SECTION D'))
Tab.addTab(Tab5, QtCore.QString('SECTION E'))
Tab.addTab(Tab6, QtCore.QString('SECTION F'))
Tab.addTab(Tab7, QtCore.QString('SECTION G'))
Tab.addTab(Tab8, QtCore.QString('SECTION H'))
Tab.addTab(Tab9, QtCore.QString('SECTION I'))
Tab.addTab(Tab10, QtCore.QString('SECTION J'))
title1 = QtGui.QLabel('title')
title2 = QtGui.QLabel('title')
title3 = QtGui.QLabel('title')
title4 = QtGui.QLabel('title')
title5 = QtGui.QLabel('title')
title6 = QtGui.QLabel('title')
title7 = QtGui.QLabel('title')
title8 = QtGui.QLabel('title')
title9 = QtGui.QLabel('title')
title10 = QtGui.QLabel('title')
self.Table1 = QtGui.QTableWidget()
self.Table2 = QtGui.QTableWidget()
self.Table3 = QtGui.QTableWidget()
self.Table4 = QtGui.QTableWidget()
self.Table5 = QtGui.QTableWidget()
self.Table6 = QtGui.QTableWidget()
self.Table7 = QtGui.QTableWidget()
self.Table8 = QtGui.QTableWidget()
self.Table9 = QtGui.QTableWidget()
self.Table10 = QtGui.QTableWidget()
Layout1 = QtGui.QVBoxLayout()
Layout2 = QtGui.QVBoxLayout()
Layout3 = QtGui.QVBoxLayout()
Layout4 = QtGui.QVBoxLayout()
Layout5 = QtGui.QVBoxLayout()
Layout6 = QtGui.QVBoxLayout()
Layout7 = QtGui.QVBoxLayout()
Layout8 = QtGui.QVBoxLayout()
Layout9 = QtGui.QVBoxLayout()
Layout10 = QtGui.QVBoxLayout()
tablist = [Tab1,Tab2,Tab3,Tab4,Tab5,Tab6,Tab7,Tab8,Tab9,Tab10]
tablabellist = [title1,title2,title3,title4,title5,title6,title7,title8,title9,title10]
self.tablelist = [self.Table1,self.Table2,self.Table3,self.Table4,self.Table5,self.Table6,self.Table7,self.Table8,self.Table9,self.Table10]
layoutlist = [Layout1,Layout2,Layout3,Layout4,Layout5,Layout6,Layout7,Layout8,Layout9,Layout10]
headerlist = [ 'ID','Question','Answer 1','Answer 2','Answer 3','Difficulty','Statistics','Date Added','Added By','Date Modified']
for item in self.tablelist:
item.setColumnCount(len(headerlist))
item.setHorizontalHeaderLabels(headerlist)
item.setEditTriggers(QtGui.QTableWidget.NoEditTriggers)
item.setSelectionBehavior(QtGui.QTableWidget.SelectRows)
item.setSelectionMode(QtGui.QTableWidget.SingleSelection)
for i in range (len(layoutlist)):
layoutlist[i].addWidget(tablabellist[i])
layoutlist[i].addWidget(self.tablelist[i])
tablist[i].setLayout(layoutlist[i])
CLayout = QtGui.QVBoxLayout()
CLayout.addWidget(Tab)
Cwidget = QtGui.QWidget()
Cwidget.setLayout(CLayout)
self.setCentralWidget(Cwidget)
如果我要像上面使用的那样添加 20 个TabWidget
,那将非常混乱和乏味。
是否可以在保持相同输出的同时缩短我的代码?
【问题讨论】:
【参考方案1】:应该这样做:
tablist = []
tablabellist = []
layoutlist=[]
self.tablelist = []
Tab = QtGui.QTabWidget()
headerlist = [ 'ID','Question','Answer 1','Answer 2','Answer 3','Difficulty','Statistics','Date Added','Added By','Date Modified']
num_tab_widgets = 10
for i in range(num_tab_widgets):
tablist.append(QtGui.QWidget())
Tab.addTab(tablist[i], QtCore.QString('SECTION %s'%chr(ord('A')+i)))
tablabellist.append(QtGui.QLabel('title'))
self.tablelist.append(QtGui.QTableWidget())
setattr(self,'Table%d'%i,self.tablelist[i])
layoutlist.append(QtGui.QVBoxLayout())
self.tablelist[i].setColumnCount(len(headerlist))
self.tablelist[i].setHorizontalHeaderLabels(headerlist)
self.tablelist[i].setEditTriggers(QtGui.QTableWidget.NoEditTriggers)
self.tablelist[i].setSelectionBehavior(QtGui.QTableWidget.SelectRows)
self.tablelist[i].setSelectionMode(QtGui.QTableWidget.SingleSelection)
layoutlist[i].addWidget(tablabellist[i])
layoutlist[i].addWidget(self.tablelist[i])
tablist[i].setLayout(layoutlist[i])
CLayout = QtGui.QVBoxLayout()
CLayout.addWidget(Tab)
Cwidget = QtGui.QWidget()
Cwidget.setLayout(CLayout)
self.setCentralWidget(Cwidget)
请注意,可能没有必要将您拥有的所有内容保存在列表中,或者作为实例(self)的一部分,但我没有质疑它,因为我不知道您的应用程序的其余部分是做什么的!希望这可以为您提供足够的信息来自己简化它。
【讨论】:
以上是关于PyQt 多个 tablewidgets 和 tabwidgets的主要内容,如果未能解决你的问题,请参考以下文章
将图像从 MySQL 获取到 PyQt5 中的 tableWidget
如何保存编辑的 PyQt5 TableWidget 单元格?
PYQT5 拖放行在 TableWidget 中未按预期工作