python - 是否可以在 Python 中使用 Combobox 更改 FigureCanvas?
问题描述
如何使用组合框下拉菜单在 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)
我希望根据所选的组合框选项替换显示的图。任何帮助将不胜感激。
解决方案
如果你想在同一个窗口空间交替显示小部件,最好使用一个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)
推荐阅读
- sendgrid - 消息未从 Sendgrid 传递,在“活动”选项卡中显示为“已处理”
- markdown - 为 html 呈现的字符串添加前缀
- sql - redshift 或 sql 中的总计行总计
- r - 使用 for 循环修改列中的值
- ios - 当要查询的数组很大并且需要时间显示时,如何在搜索栏中显示整个点击文本的结果?
- sql - 比较 2 个 Postgres 布尔行/实体
- python - 如何使用模型中保存的字段搜索 Django 数据库?
- javascript - 使用 res.render 时 CSS 和图像不呈现
- python - 将日期while循环转换为for循环
- python - 结合两个 subprocess.run() 命令来提高性能