如何在pyQt中的按钮和制表符小部件之间建立插槽或信号

时间:2018-04-14 13:36:53

标签: python user-interface pyqt

我只需要知道我是否可以在tabwidget中的按钮和特定页面之间创建一个插槽或信号,或者不是!

如果是,那怎么样?

我将标签小部件分成4页。我的问题是我是否可以在第一页和第二页的按钮之间制作插槽或信号。

1 个答案:

答案 0 :(得分:1)

试一试:

from PyQt5.QtWidgets import (QWidget, QApplication, QTabWidget, QLabel, QPushButton,
                            QVBoxLayout, QMenuBar, QAction)

class MainWidget(QWidget):
    def __init__(self, textLabel, *args, **kwargs):
        super(MainWidget, self).__init__(*args, **kwargs)

        layout     = QVBoxLayout(self)     
        self.label = QLabel(textLabel, self)
        self.btn   = QPushButton('Next', self)
        layout.addWidget(self.label)
        layout.addWidget(self.btn)    

class Window(QWidget):
    def __init__(self):
        super().__init__()
        bar = QMenuBar(self)
        menu = bar.addMenu('File')
        action = QAction('Close activ tab', self)
        menu.addAction(action)
        action.triggered.connect(self.closeActivTab)        

        self.tabwdg = QTabWidget()            
        self.tabwdg.setTabsClosable(True)      

        self.tabWidget = MainWidget('this is the first page')
        self.tabwdg.addTab(self.tabWidget, 'first')
        self.tabWidget.btn.clicked.connect(self.numTab)
        self.tabWidget = MainWidget('this is the second page')
        self.tabwdg.addTab(self.tabWidget, 'second')
        self.tabWidget.btn.clicked.connect(self.numTab)
        self.tabWidget = MainWidget('this is the third page')
        self.tabwdg.addTab(self.tabWidget, 'third')
        self.tabWidget.btn.clicked.connect(self.numTab)
        self.tabWidget = MainWidget('this is the fourth page')
        self.tabwdg.addTab(self.tabWidget, 'fourth')
        self.tabWidget.btn.clicked.connect(self.numTab)

        self.tabwdg.tabCloseRequested.connect(self.closeTab) 

        box = QVBoxLayout()                
        box.addWidget(bar)
        box.addWidget(self.tabwdg)
        self.setLayout(box)

    def numTab(self):
        nextTab = self.tabwdg.currentIndex()+1
        if nextTab == self.tabwdg.count():
            nextTab = 0
        self.tabwdg.setCurrentIndex(nextTab)
        self.tabwdg.setCurrentWidget(self.tabwdg.currentWidget())

    def closeActivTab(self):
        activ_tab_ind = self.tabwdg.currentIndex()
        self.closeTab(activ_tab_ind)

    def closeTab(self, ind): 
        self.tabwdg.removeTab(ind)


if __name__ == '__main__':
    import sys
    app = QApplication([''])
    w = Window()
    w.resize(400, 300)
    w.show()
    sys.exit(app.exec_())

enter image description here

相关问题