Eine kurze Erklärung. Ich möchte in einem Qt5-Fenster basemap-Grafik ausgeben. Dies funktioniert mit nachfolgendem Code.
Jetzt möchte ich die Grafik repainten. dazu habe ich im Modell zwei Ausgaben der Weltkarte programmiert, welche mittels den Buttons eingeblendet werden sollen.
Ich kann jede Grafik einmal aufrufen. Möchte ich diese überschreiben, so passiert nichts im Qt5-Fenster. Im Jupiter-Notebook angewendet sehe ich aber die richtige Ausgabe der Grafik.
Meine Frage, wie kann ich die Angaben im FigureCanvas (oder sonst wo) löschen, damit die neue Grafik angezeigt wird?
Danke für eure Hinweise...
Code: Alles auswählen
import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from mpl_toolkits.basemap import Basemap
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class BasemapCanvas(FigureCanvas):
def __init__(self, *args, **kwargs):
self.figure = plt.figure()
FigureCanvas.__init__(self, self.figure)
self.figure.patch.set_facecolor("None")
self.figure.subplots_adjust(left=0.019, bottom=0.035, right=0.99, top=0.964)
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Basemap einrichten
self.graph = BasemapCanvas()
vbox = QVBoxLayout()
vbox.addWidget(self.graph)
self.ui.frame.setLayout(vbox)
self.ui.pushButton_1.clicked.connect(self.plot_point1)
self.ui.pushButton_2.clicked.connect(self.plot_point2)
self.show()
def plot_point1(self):
self.graph.figure.clf()
self.axes = self.graph.figure.add_subplot(111)
self.x = [0, 10, 20, 30]
self.y = [0, 10, 20, 30]
self.map = Basemap(resolution = 'l')
self.map.drawmapboundary(fill_color='#00BFFF',zorder=1)
self.map.fillcontinents(color='#F5D0A9',zorder=2,lake_color='aqua')
self.axes.scatter(self.y,self.x, color='#FF0080', s=75, marker="*", zorder=4)
plt.show()
def plot_point2(self):
self.graph.figure.clf()
self.axes = self.graph.figure.add_subplot(111)
# set up orthographic map projection with
# perspective of satellite looking down at 50N, 100W.
# use low resolution coastlines.
m = Basemap(projection='ortho', lat_0=47.1, lon_0=8.3, resolution='l')
# draw coastlines, country boundaries, fill continents.
m.drawcoastlines(linewidth=0.25)
m.drawcountries(linewidth=0.25)
m.fillcontinents(color='coral', lake_color='aqua')
# draw the edge of the map projection region (the projection limb)
m.drawmapboundary(fill_color='aqua')
# draw lat/lon grid lines every 30 degrees.
m.drawmeridians(np.arange(0, 360, 30))
m.drawparallels(np.arange(-90, 90, 30))
plt.show()
if __name__ == "__main__":
# Erzeugen eines Applikations-Objektes
app = QApplication(sys.argv)
# Erzeugen eines Fensters
win = MainWindow()
# Darstellung des Fensters
win.show()
# Ordnungsgemässe Beenung der Anwendung
sys.exit(app.exec_())
#### END of Main #######
Code: Alles auswählen
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1460, 1112)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setObjectName("groupBox")
self.layoutWidget = QtWidgets.QWidget(self.groupBox)
self.layoutWidget.setGeometry(QtCore.QRect(19, 44, 1386, 115))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout_9 = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout_9.setContentsMargins(0, 0, 0, 0)
self.gridLayout_9.setObjectName("gridLayout_9")
self.pushButton_1 = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton_1.setObjectName("pushButton_1")
self.gridLayout_9.addWidget(self.pushButton_1, 0, 1, 1, 1)
self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout_9.addWidget(self.pushButton_2, 0, 3, 1, 1)
self.label_37 = QtWidgets.QLabel(self.layoutWidget)
self.label_37.setObjectName("label_37")
self.gridLayout_9.addWidget(self.label_37, 0, 0, 1, 1)
self.label_38 = QtWidgets.QLabel(self.layoutWidget)
self.label_38.setFrameShape(QtWidgets.QFrame.NoFrame)
self.label_38.setObjectName("label_38")
self.gridLayout_9.addWidget(self.label_38, 0, 2, 1, 1)
self.label = QtWidgets.QLabel(self.layoutWidget)
self.label.setText("")
self.label.setObjectName("label")
self.gridLayout_9.addWidget(self.label, 0, 4, 1, 1)
self.gridLayout_9.setColumnStretch(4, 100)
self.horizontalLayoutWidget = QtWidgets.QWidget(self.groupBox)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(19, 171, 1386, 811))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayoutVerlauf = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayoutVerlauf.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
self.horizontalLayoutVerlauf.setContentsMargins(0, 0, 0, 0)
self.horizontalLayoutVerlauf.setSpacing(12)
self.horizontalLayoutVerlauf.setObjectName("horizontalLayoutVerlauf")
self.frame = QtWidgets.QFrame(self.horizontalLayoutWidget)
self.frame.setMinimumSize(QtCore.QSize(1429, 809))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.horizontalLayoutVerlauf.addWidget(self.frame)
self.verticalLayout.addWidget(self.groupBox)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1460, 38))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.groupBox.setTitle(_translate("MainWindow", "GroupBox"))
self.pushButton_1.setText(_translate("MainWindow", "Grafik 1"))
self.pushButton_2.setText(_translate("MainWindow", "Grafik2"))
self.label_37.setText(_translate("MainWindow", "Karte 1"))
self.label_38.setText(_translate("MainWindow", "Karte 2"))