在PyQt5 / Python的两个标签中使用变量/数据

时间:2019-11-28 22:26:14

标签: python pyqt5

我试图在一个选项卡中获取用户输入,然后在第二个选项卡中显示该输入。我找不到有关如何执行此操作的问题或示例。这是我要使用的代码示例,如何在Tab(2)的QTextEdit框中显示Tab(1)Qlabel中的数据,我是pyqt5的初学者,不确定如何工作:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class TabWidget(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Tab Widget Application')

        tabwidget = QTabWidget()
        tabwidget.addTab(FirstTab(), 'First Tab')
        tabwidget.addTab(SecondTab(),'Second Tab')

        vbox=QVBoxLayout()
        vbox.addWidget(tabwidget)

        self.setLayout(vbox)
class FirstTab(QWidget):
    def __init__(self):
        super().__init__()
        self.nameLabel = QLabel(self)
        self.nameLabel.setText('Name:')
        self.line = QLineEdit(self)
        self.line.move(80, 20)
        self.line.resize(200, 32)
        self.nameLabel.move(20, 20)
        self.btn=QPushButton('switch',self)
        self.btn.move(80, 50)
        self.btn.clicked.connect(lambda: SecondTab.display(SecondTab(),self.nameLabel.text()))
class SecondTab(QWidget):
    def __init__(self):
        super().__init__()
        self.layout = QVBoxLayout()
        self.editor=QTextEdit()
        self.layout.addWidget(self.editor)
        self.setLayout(self.layout)


    def display(self,text):
        self.editor.setText(text)

if __name__ == '__main__':
    app=QApplication(sys.argv)
    tabwidget = TabWidget()
    tabwidget.resize(500,500)
    tabwidget.show()
    app.exec()

1 个答案:

答案 0 :(得分:2)

为了跟踪子小部件之间的更改,您需要一个主“控制器”。
只要您以正确的方式实现它,您的QTabWidget就足够了:

class TabWidget(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Tab Widget Application')

        # if the target widget of the layout is provided as an init argument, the
        # layout will be automatically set to it
        vbox = QVBoxLayout(self)

        tabwidget = QTabWidget()
        vbox.addWidget(tabwidget)

        firstTab = FirstTab()
        tabwidget.addTab(firstTab, 'First Tab')
        secondTab = SecondTab()
        tabwidget.addTab(secondTab,'Second Tab')

        firstTab.line.textChanged.connect(secondTab.editor.setPlainText)
        firstTab.btn.clicked.connect(lambda: tabwidget.setCurrentWidget(secondTab))