是否可以在 Python 中使用 Combobox 更改 FigureCanvas?

Posted

技术标签:

【中文标题】是否可以在 Python 中使用 Combobox 更改 FigureCanvas?【英文标题】:Is it possible to change a FigureCanvas using Combobox in Python? 【发布时间】:2019-09-23 02:52:20 【问题描述】:

如何使用组合框下拉菜单在 GUI 中已创建的绘图之间切换?现在我的 GUI 打开了,当我点击组合框时没有任何反应。

我对编程还很陌生,所以我的知识非常有限。如果问题太含糊,我深表歉意。

class Untersuchung(QWidget):  
    def __init__(self): 
        QWidget.__init__(self)
        self.setWindowTitle("Projekt")

        layout = QGridLayout() 
        self.setLayout(layout)

        label1 = QLabel("Choose the Plot") 
        layout.addWidget(label1,0,0)

        self.figure1 = #PLOT1
        self.canvas1 = FigureCanvas(self.figure1)
        self.figure2 = #PLOT2
        self.canvas2 = FigureCanvas(self.figure2)


        self.combobox1 = QComboBox() 
        self.combobox1.addItem("Option1")
        self.combobox1.addItem("Option2")
        layout.addWidget(self.combobox1,1,0)        
        self.combobox1.activated.connect(self.dropdown)

我不确定这个函数应该是什么。

def dropdown(self):     
    if self.combobox1.currentText() == "Option1":
        self.setLayout(layout)
        layout.addWidget(self.canvas1,2,0)
    elif self.combobox1.currentText() == "Option2":
        self.setLayout(layout)
        layout.addWidget(self.canvas2,2,0)

我希望根据所选的组合框选项替换显示的图。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果要在同一个窗口空间交替显示widget,最好使用QStackedWidget或者QStackLayout,下面例子中第一个选项:

class Untersuchung(QWidget):
    def __init__(self, parent=None):
        super(Untersuchung, self).__init__(parent)
        self.setWindowTitle("Projekt")

        layout = QGridLayout(self)
        label1 = QLabel("Choose the Plot")
        layout.addWidget(label1, 0, 0)

        self.figure1 = #PLOT1
        self.canvas1 = FigureCanvas(self.figure1)
        self.figure2 = #PLOT2
        self.canvas2 = FigureCanvas(self.figure2)

        self.combobox1 = QComboBox()
        stacked_widget = QStackedWidget()

        for text, canvas in zip(
            ("Option1", "Option2"), (self.canvas1, self.canvas2)
        ):
            self.combobox1.addItem(text)
            stacked_widget.addWidget(canvas)

        self.combobox1.currentIndexChanged[int].connect(
            stacked_widget.setCurrentIndex
        )
        layout.addWidget(self.combobox1, 1, 0)
        layout.addWidget(stacked_widget, 2, 0)

【讨论】:

这个答案正是我想要的,非常感谢!

以上是关于是否可以在 Python 中使用 Combobox 更改 FigureCanvas?的主要内容,如果未能解决你的问题,请参考以下文章

delphi中的ComboBox组件的使用?

c#中,如何对COMBOBOX的SelectedIndexChanged事件分别执行程序?

Python,Qt,ComboBox,两列?

wpf combobox 关闭窗口后,再次调用不显示已经选择的值?

检查是否选择了组合框

如何将信息从 ComboBox 发送到 Python