ich habe Geokartenkacheln als Graphikdateien (png). Diese möchte ich mit pyqt5 in QGraphicsView in die Scene laden. In meinem Beispiel mache ich das vorerst zum Testen mit 2 "Load-Button". Die einzelnen Bilder(Kacheln) sollen aber am Ende durch diverse Kriterien "automatisch" in die Scene geladen werden. In der Regel sollen dann immer 3x3 Kacheln geladen werden.
Mein "Versuchsaufbau" sieht wie unten aus. Das Problem: Die erste Kachel laden geht richtig. Sobald die zweite Kachel "dazu" geladen wird, ist die 2. Kachel mit dem richtigen Offset da, aber die erste Kachel wird nicht mehr angzeigt. (Da wo sie vorher war, ist jetzt leer (weiss). Warum das?
Wenn ich testweise mehrere Kacheln schon in "class Ui_MainWindow" in die Scene lade, dann geht es richtig (also nicht mit der Klasse "mapTiler()" geladen).
Und generell ist der Ansatz so vernünftig oder bin ich da auf dem Holzweg?
Danke schon mal für eure Inputs dazu.
Falls die GUI datei auch noch gebraucht wird einfach melden. Habe ich mit QT-Designer erstellt. (Tut ja aber nicht viel zur Sache)
Code: Alles auswählen
from PyQt5 import QtGui, QtWidgets, uic
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsPixmapItem
MAIN_FILEPATH = R'C:\Python37\projects''\\'
GUI_NAME = 'gui_v1.ui'
class mapTiler():
def __init__(self):
self._PIX_SIZE = 2500
self._photo = QGraphicsPixmapItem()
self.scene = QGraphicsScene()
def add_tile(self, pixmap, tile_pos = 0):
if tile_pos == 0:
x = 0 * self._PIX_SIZE ; y = 0 * self._PIX_SIZE
elif tile_pos == 1:
x = 1 * self._PIX_SIZE ; y = 0 * self._PIX_SIZE
elif tile_pos == 2:
x = 0 * self._PIX_SIZE ; y = 1 * self._PIX_SIZE
elif tile_pos == 3:
x = 1 * self._PIX_SIZE ; y = 1 * self._PIX_SIZE
else:
print('tile pos error!')
x = 0 ; y = 0
self._photo.setPixmap(pixmap)
self._photo.moveBy(x, y)
self.scene.addItem(self._photo)
class Ui_MainWindow(QtWidgets.QMainWindow, QGraphicsView):
def __init__(self, parent=None):
super(Ui_MainWindow, self).__init__(parent)
self.geoMap = mapTiler()
self.ui = uic.loadUi(MAIN_FILEPATH + GUI_NAME, self)
self.ui.graphicsView.setDragMode(QtWidgets.QGraphicsView.ScrollHandDrag)
self.ui.graphicsView.setScene(self.geoMap.scene)
self.btnLoad_1.clicked.connect(self.loadImage1)
self.btnLoad_2.clicked.connect(self.loadImage2)
def loadImage1(self):
self.geoMap.add_tile(QtGui.QPixmap(MAIN_FILEPATH + 'IMG-1.png'), 1)
def loadImage2(self):
self.geoMap.add_tile(QtGui.QPixmap(MAIN_FILEPATH + 'IMG-2.png'), 2)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Ui_MainWindow()
window.setGeometry(500, 300, 800, 600)
window.show()
sys.exit(app.exec_())