使用 PyQt5 连接按钮以在不同的选项卡上运行

Connecting Push Button to function on different tab using PyQt5

我正在尝试将按钮连接到不同选项卡上的功能,我一直在寻找解决方案但没有取得任何进展,我在下面提供了代码的简化版本。基本上,我希望 Tab1 上的 QPushButton 连接到 Tab2 上的 plot_show 函数。任何建议将不胜感激。

谢谢。

import sys
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvas
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc


class  Tab1(qtw.QWidget):
    def __init__(self):
        super().__init__()
        
        self.resize(1000,850)
        self.button1 = qtw.QPushButton("Plot")
        
        #self.button1.clicked.connect(??????)????? # connect this to the plot_show function on Tab2
        
        main_layout = qtw.QHBoxLayout()
        self.setLayout(main_layout)
        main_layout.addWidget(self.button1)

class Tab2(qtw.QWidget):
    def __init__(self):
        super().__init__()
        
        self.x=[1,2,3]
        self.y=[4,5,6]

        self.fig, self.ax = plt.subplots()
        self.plotWidget=FigureCanvas(self.fig)
            
        main_layout = qtw.QVBoxLayout()
        self.setLayout(main_layout)
        main_layout.addWidget(self.plotWidget)

    def plot_show(self):
        self.ax.plot(self.x,self.y)

class MainWindow(qtw.QMainWindow):

    def __init__(self):
        super().__init__()
        
        self.tabs = qtw.QTabWidget()
        self.setCentralWidget(self.tabs)

        self.tab1=Tab1()
        self.tab2=Tab2()
        self.tabs.addTab(self.tab1, "Tab 1")
        self.tabs.addTab(self.tab2, "Tab 2")

        self.show()

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())

好的,根据你的代码,我做了一个快速修复来实现你的要求,只需将 self.tab1.button1.clicked.connect(self.tab2.plot_show) 放在你的 MainWindow class:

class MainWindow(qtw.QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.tabs = qtw.QTabWidget()
        self.setCentralWidget(self.tabs)

        self.tab1 = Tab1()
        self.tab2 = Tab2()
        self.tabs.addTab(self.tab1, "Tab 1")
        self.tabs.addTab(self.tab2, "Tab 2")

        self.tab1.button1.clicked.connect(self.tab2.plot_show)
        self.show()

单击按钮,更改选项卡,您的绘图位于选项卡 2 中。因此,您必须从像 MainWindow 这样的公共位置建立连接,或者使用继承原则。我希望这可以作为您编写代码的开始。

另请注意,您无需为添加到 QTabsWidget 的选项卡创建新的 class。