通过单击另一个选项卡上的按钮来更改选项卡的UI

问题描述 投票:1回答:1

我一直在创建一个包含两个选项卡的应用程序。为了更轻松地了解我想要的内容,在Tab1中有一个“开始”按钮,然后单击该按钮,我希望在Tab2中添加一个表。 Tab1和Tab2中已经有一些小部件,应保持不变。该表应添加到GroupBox。

import sys

from PyQt5 import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'Application'
        self.setWindowTitle(self.title)

        self.tab_widget = MyTabWidget(self)
        self.setCentralWidget(self.tab_widget)

        self.showFullScreen()

class MyTabWidget(QWidget):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        #Initialize tab screen
        self.tabs = QTabWidget()
        self.one_tab = TabOne()
        self.two_tab = TabTwo()
        self.tabs.resize(300,200)

        #Add tabs
        self.tabs.addTab(self.map_tab,QIcon("./icons and images/tab_map.png"), ('Tab1'))
        self.tabs.addTab(self.address_tab,QIcon("./icons and images/tab_addresses.png"), ('Addresses'))


        #Add tabs to widget
        self.layout.addWidget(self.tabs)
        self.setLayout(self.layout)

class TabOne(QWidget):
    def __init__(self):
        super().__init__()

        self.startButton()

    #Push button at the center
    def startButton(self):
        button = QPushButton("Start", self)
        button.move(655, 415)
        button.clicked.connect(self.main)

        self.show()

    def main():
        #Wants to add A table in Tab2

class TabTwo(QWidget):
    def __init__(self):
        super().__init__()
        #Want to add a table after clicking the start button

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

我将在JSON文件的帮助下添加表。

python python-3.x pyqt pyqt5
1个回答
1
投票
想法是使用信号通知应该添加表并将其连接到创建并添加表的TabTwo方法。

class MyTabWidget(QWidget): def __init__(self, parent): super(QWidget, self).__init__(parent) lay = QVBoxLayout(self) # Initialize tab screen self.tabs = QTabWidget() self.one_tab = TabOne() self.two_tab = TabTwo() self.one_tab.clicked.connect(self.two_tab.add_table) self.tabs.resize(300, 200) # Add tabs self.tabs.addTab( self.one_tab, QIcon("./icons and images/tab_map.png"), ("Tab1") ) self.tabs.addTab( self.two_tab, QIcon("./icons and images/tab_addresses.png"), ("Addresses") ) lay.addWidget(self.tabs) class TabOne(QWidget): clicked = pyqtSignal() def __init__(self): super().__init__() self.startButton() def startButton(self): button = QPushButton("Start", self) button.move(655, 415) button.clicked.connect(self.clicked) self.show() class TabTwo(QWidget): def __init__(self): super().__init__() self._lay = QVBoxLayout(self) @pyqtSlot() def add_table(self): table = QTableWidget(4, 4) self._lay.addWidget(table)

更新:

如果需要其他信息,则在创建信号时,必须确定要传输的数据类型:

class MyTabWidget(QWidget): def __init__(self, parent): super(QWidget, self).__init__(parent) lay = QVBoxLayout(self) # Initialize tab screen self.tabs = QTabWidget() self.one_tab = TabOne() self.two_tab = TabTwo() self.one_tab.clicked.connect(self.two_tab.add_table) self.tabs.resize(300, 200) # Add tabs self.tabs.addTab( self.one_tab, QIcon("./icons and images/tab_map.png"), ("Tab1") ) self.tabs.addTab( self.two_tab, QIcon("./icons and images/tab_addresses.png"), ("Addresses") ) lay.addWidget(self.tabs) class TabOne(QWidget): clicked = pyqtSignal(int, int) def __init__(self): super().__init__() self.startButton() def startButton(self): button = QPushButton("Start", self) button.move(655, 415) button.clicked.connect(self.onClicked) self.show() @pyqtSlot() def onClicked(self): self.clicked.emit(5, 5) class TabTwo(QWidget): def __init__(self): super().__init__() self._lay = QVBoxLayout(self) @pyqtSlot(int, int) def add_table(self, rows, columms): table = QTableWidget(rows, columms) self._lay.addWidget(table)
© www.soinside.com 2019 - 2024. All rights reserved.