2017-11-03 282 views
0

我有一個選項卡小部件,其中包含每個選項卡的表小部件,我也有一個選項的碼頭小部件。其中一個選項是列計數,我希望在列計數旋轉框值更改後立即對其進行更改。但是,當切換到不同的選項卡時,我希望旋轉框值(和所有其他選項)重置/切換到特定選項卡的設置。PyQt每個選項卡小部件

我的問題是如何最好地做到這一點,仍然有作爲碼頭小部件的選項。我可以將所有設置存儲爲每個選項卡小部件的變量,然後在每次打開新選項卡時更改該值,我想,但也許有更好的解決方案。

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)) 
相關問題