我一直在创建一个包含两个选项卡的应用程序。为了更轻松地了解我想要的内容,在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文件的帮助下添加表。
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)