每个选项卡小部件的 PyQt 选项
Posted
技术标签:
【中文标题】每个选项卡小部件的 PyQt 选项【英文标题】:PyQt Options for each Tab Widget 【发布时间】:2017-11-03 22:21:30 【问题描述】:我有一个标签小部件,其中包含每个标签的表格小部件,我还有一个带有选项的停靠小部件。选项之一是列数,我想在列数旋转框值更改后立即更改它。但是当切换到不同的选项卡时,我希望旋转框值(和所有其他选项)重置/切换到该特定选项卡的设置。
我的问题是如何最好地做到这一点,并且仍然可以选择作为停靠小部件。我可以将所有设置存储为每个选项卡小部件的变量,然后在每次打开新选项卡时更改值,我猜,但也许有更好的解决方案。
from PyQt5 import QtWidgets, QtCore
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent = None):
super(MainWindow, self).__init__()
self.__setup__()
def __setup__(self):
self.resize(400, 400)
tabWidget = TabWidget(self)
self.setCentralWidget(tabWidget)
options = Options(self)
optionsDock = QtWidgets.QDockWidget()
optionsDock.setWidget(options)
optionsDock.setWindowTitle("Options")
self.addDockWidget(QtCore.Qt.TopDockWidgetArea, optionsDock)
options.spinBox_columns.valueChanged.connect(lambda: tabWidget.tabWidget.currentWidget().
setColumnCount(options.spinBox_columns.value()))
class Options(QtWidgets.QWidget):
def __init__(self, parent):
super(Options, self).__init__(parent)
self.__setup__()
def __setup__(self):
self.spinBox_columns = QtWidgets.QSpinBox()
self.spinBox_columns.setValue(1)
self.spinBox_columns.setMinimum(1)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.spinBox_columns)
self.setLayout(layout)
class TabWidget(QtWidgets.QWidget):
def __init__(self, parent):
super(TabWidget, self).__init__(parent)
self.__setup__()
def __setup__(self):
self.tabWidget = QtWidgets.QTabWidget()
for i in range(3):
widget = QtWidgets.QTableWidget()
widget.setColumnCount(1)
widget.setRowCount(3)
self.tabWidget.addTab(widget, "Column " + str(i))
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.tabWidget)
self.setLayout(layout)
def main():
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
【问题讨论】:
【参考方案1】:你必须连接标签的索引提供的currentChanged
信号,然后使用widget()
方法获取与该索引关联的索引,然后访问它的QTabWidget
并获取使用它的列数将值放入QSpinBox
。
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.__setup__()
def __setup__(self):
self.resize(400, 400)
tabWidget = TabWidget(self)
self.setCentralWidget(tabWidget)
options = Options(self)
optionsDock = QtWidgets.QDockWidget()
optionsDock.setWidget(options)
optionsDock.setWindowTitle("Options")
self.addDockWidget(QtCore.Qt.TopDockWidgetArea, optionsDock)
tabWidget.tabWidget.currentChanged.connect(lambda index: options.spinBox_columns.
setValue(tabWidget.tabWidget.widget(index).columnCount()))
options.spinBox_columns.valueChanged.connect(lambda value: tabWidget.tabWidget.currentWidget().
setColumnCount(value))
【讨论】:
以上是关于每个选项卡小部件的 PyQt 选项的主要内容,如果未能解决你的问题,请参考以下文章
国际开发协会 Python + Qt。如何将我自己的选项卡插入 IDA 主选项卡小部件?