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
Geometrische Objekte werden generiert, aber nicht angezeigt.
-
- User
- Beiträge: 407
- Registriert: Freitag 6. August 2010, 17:03
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:
Gruß
Atalanttore
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()
Atalanttore
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.
https://github.com/pyqtgraph/pyqtgraph
ist das vielleicht etwas, wo du viel Python-Code findest, der QGraphicsView findest, an dem du dich langhangeln kannst.
-
- User
- Beiträge: 407
- Registriert: Freitag 6. August 2010, 17:03
@__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
Mittlerweile habe ich nicht nur eine, sondern zwei Lösungen für das Problem gefunden. Siehe hier.
Gruß
Atalanttore
-
- User
- Beiträge: 407
- Registriert: Freitag 6. August 2010, 17:03
@__deets__: Sind die `__init__.py`-Dateien in den Verzeichnissen Anfangspunkte?
Gruß
Atalanttore
Gruß
Atalanttore