Seite 4 von 5
Re: Geometrische Objekte werden generiert, aber nicht angezeigt.
Verfasst: Sonntag 20. Januar 2019, 22:06
von Atalanttore
Dann kann ich weiter an meiner Erweiterung basteln. Allerdings muss ich auch noch ein anderes Problem dafür lösen, aber das ist in einem
anderen Thema.
Gruß
Atalanttore
Re: Geometrische Objekte werden generiert, aber nicht angezeigt.
Verfasst: Mittwoch 23. Januar 2019, 17:20
von Atalanttore
Zum Einbau einer Erweiterung habe ich an den Stellschrauben im Code gedreht, damit es mehr nach Weltraum aussieht. Dabei ist mir aufgefallen, dass wieder mal (wie bei Tkinter) ein dünner weißer Rahmen um den schwarzen Hintergrund gezeichnet wird. Vor allem im Vollbildmodus sieht man den Rahmen. Wie bekommt man bei Qt diesen Rahmen weg?
Code:
Code: Alles auswählen
import random
import time
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene
from PyQt5.QtGui import QPainterPath, QPolygonF
SPEED = 5000
MIN_DISTANCE = 30000
DISTANCE_VARIANCE = 20000
class Star:
D = 1000
def __init__(self, scene):
path = QPainterPath()
#path.addRect(-10, -10, 20, 20)
polygon = QPolygonF()
polygon.append(QtCore.QPointF(13, 0))
polygon.append(QtCore.QPointF(10, -5))
polygon.append(QtCore.QPointF(10, -10))
polygon.append(QtCore.QPointF(5, -10))
polygon.append(QtCore.QPointF(0, -13))
polygon.append(QtCore.QPointF(-5, -10))
polygon.append(QtCore.QPointF(-10, -10))
polygon.append(QtCore.QPointF(-10, -5))
polygon.append(QtCore.QPointF(-13, 0))
polygon.append(QtCore.QPointF(-10, 5))
polygon.append(QtCore.QPointF(-10, 10))
polygon.append(QtCore.QPointF(-5, 10))
polygon.append(QtCore.QPointF(0, 13))
polygon.append(QtCore.QPointF(5, 10))
polygon.append(QtCore.QPointF(10, 10))
polygon.append(QtCore.QPointF(10, 5))
path.addPolygon(polygon)
self._x, self._y = random.random() * 20000 - 10000, random.random() * 20000 - 10000
self._z = random.random() * 20000 + MIN_DISTANCE
self._speed = random.random() * SPEED
self._path = scene.addPath(path)
self._path.setBrush(QtCore.Qt.white)
self.update(0) # force placement
def update(self, elapsed):
self._z -= elapsed * self._speed
if self._z < 0:
self._z = random.random() * DISTANCE_VARIANCE + MIN_DISTANCE
self._path.setX(self._x * self.D / self._z)
self._path.setY(self._y * self.D / self._z)
self._path.setScale(1 - self._z / (MIN_DISTANCE + DISTANCE_VARIANCE)) # Skalierung
self._path.setRotation(self._path.rotation() + elapsed * 360) # Drehung
return [self]
class StarSpawner:
STARS_PER_SECOND = 10
TOTAL_STARS = 100
def __init__(self, scene):
self._star_spawn_period = 1.0 / self.STARS_PER_SECOND
self._accu = 0.0
self._count = self.TOTAL_STARS
self._scene = scene
def update(self, elapsed):
self._accu += elapsed
spawned_stars = []
while self._accu > self._star_spawn_period:
spawned_stars.append(Star(self._scene))
self._accu -= self._star_spawn_period
self._count -= len(spawned_stars)
if self._count > 0:
spawned_stars.append(self)
return spawned_stars
class GraphicsWindow(QGraphicsView):
def __init__(self, parent=None):
super(GraphicsWindow, self).__init__(parent)
self._last = time.monotonic()
scene = QGraphicsScene(self)
self.setScene(scene)
self.setBackgroundBrush(QtCore.Qt.black)
self._things = [StarSpawner(scene)]
scene.setSceneRect(-400, -400, 800, 800)
self._timer = QtCore.QTimer(self)
self._timer.setSingleShot(False)
self._timer.setInterval(1000 / 60)
self._timer.timeout.connect(self._update_all)
self._timer.start()
def _update_all(self):
now = time.monotonic()
elapsed = now - self._last
self._last = now
things_for_this_frame = self._things
self._things = [] # neu!
for thing in things_for_this_frame:
print(things_for_this_frame)
self._things.extend(thing.update(elapsed))
def main():
app = QApplication(sys.argv)
graphics_window = GraphicsWindow()
graphics_window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Gruß
Atalanttore
Re: Geometrische Objekte werden generiert, aber nicht angezeigt.
Verfasst: Donnerstag 24. Januar 2019, 13:04
von __deets__
Ich kann das im Moment nicht selbst ueberpruefen. Aber weil ich gestern fuer ein Projekt das hier gefunden habe
https://github.com/pyqtgraph/pyqtgraph
ist das vielleicht etwas, wo du viel Python-Code findest, der QGraphicsView findest, an dem du dich langhangeln kannst.
Re: Geometrische Objekte werden generiert, aber nicht angezeigt.
Verfasst: Donnerstag 24. Januar 2019, 21:44
von Atalanttore
@__deets__: Ganz schön viel Code. Wo beginnt da ein erfahrener Programmierer mit dem Entlanghangeln?
Mittlerweile habe ich nicht nur eine, sondern zwei Lösungen für das Problem gefunden. Siehe
hier.
Gruß
Atalanttore
Re: Geometrische Objekte werden generiert, aber nicht angezeigt.
Verfasst: Donnerstag 24. Januar 2019, 21:48
von __deets__
Einfach querlesen. Was dein Anfang ist kann ich dir nicht sagen. Das Ding hat Beispiele, wenn du darin etwas siehst, dass dir gefällt, schau dir die Klassen etc an p, die benutzt werden.
Re: Geometrische Objekte werden generiert, aber nicht angezeigt.
Verfasst: Donnerstag 24. Januar 2019, 21:51
von Atalanttore
@__deets__: Sind die `__init__.py`-Dateien in den Verzeichnissen Anfangspunkte?
Gruß
Atalanttore
Re: Geometrische Objekte werden generiert, aber nicht angezeigt.
Verfasst: Donnerstag 24. Januar 2019, 21:57
von __deets__
Nicht mehr oder weniger als alle anderen .py Dateien.