【发布时间】:2020-09-19 03:07:23
【问题描述】:
我想根据选定的 QRadiobutton 更改 Figure。在我的真实代码中,我尝试了各种方法来使用和不使用信号(另外,检查其他主题。)。 为了使它看起来不那么复杂,我重新排列了我的代码以供提问。
我希望有人可以帮助我克服这种情况。
这是我的代码; figure.py
from PyQt5.QtWidgets import*
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from numpy import arange, sin, cos, pi
class MainCanvas(FigureCanvas):
"""Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
t = arange(0.0, 5.0, 0.01)
s = sin(2 * pi * t)
self.axes.plot(t, s, color="red", linestyle="solid")
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
ui = MainCanvas()
ui.show()
sys.exit(app.exec_())
main.py
from PyQt5.QtWidgets import *
from figure import MainCanvas
class RadioButton(QWidget):
def __init__(self):
super().__init__()
self.main_cavnas = MainCanvas()
self.InitUi()
def InitUi(self):
groups = {"Functions": ("Sinus", "Cosines"),
"Colors": ("Red", "Green"),
"Line Styles": ("Solid", "Dashed")
}
widget_layout = QVBoxLayout()
main_group = QGroupBox("Operations")
main_group_layout = QHBoxLayout()
for group, buttons in groups.items():
group_box = QGroupBox(group)
group_layout = QVBoxLayout()
for button_text in buttons:
button = QRadioButton(button_text)
button.setObjectName("radiobutton_%s" % button_text.lower())
if button_text == "Sinus" or button_text == "Red" or button_text == "Solid":
button.setChecked(True)
group_layout.addWidget(button)
group_box.setLayout(group_layout)
main_group_layout.addWidget(group_box)
main_group.setLayout(main_group_layout)
widget_layout.addWidget(self.main_cavnas)
widget_layout.addWidget(main_group)
self.setLayout(widget_layout)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
ui = RadioButton()
ui.show()
sys.exit(app.exec_())
【问题讨论】:
-
你可以使用 matplotlib 的小部件,为你的情况RadioButtons
-
谢谢你的回答,但我有更复杂的 GUI。我只是把它作为我的问题的基础。您发送的代码无法满足需求。
标签: python python-3.x matplotlib pyqt5