- Offizieller Beitrag
Hallo OneNightNeon,
willkommen im Forum!
Auch für Dein Anliegen würde sich ein eigener Thread sicher besser eignen. Das Thema ist zu umfangreich um es hier mal eben schnell zu behandeln.
Hallo OneNightNeon,
willkommen im Forum!
Auch für Dein Anliegen würde sich ein eigener Thread sicher besser eignen. Das Thema ist zu umfangreich um es hier mal eben schnell zu behandeln.
Wie sage ich es in Python ? (Einsteigerfragen)? Schau mal ob du hier fündig wirst!
Hallo,
Es geht um Migration von Python2 nach Python3.
Danke schonmal, kle
Hallo,
> Warum hat Python2 sich nicht beschwert?
Beschwert = Warning oder Error?
Nutzen Pygamg für P2 und P3 den gleiche Code / das gleich Python-Modul oder wird das getrennt ausgeliefert?
Aber das Verhalten vpn P3 würde ich als richtig bezeichnen und das von P2 als "suboptimal" - was anderes als ein Integer macht hier ja IMHO keinen Sinn.
Ansonsten ist das wohl eher eine Frage für die Entwickler von Pygame...
Gruß, noisefloor
Nutzen Pygamg für P2 und P3 den gleiche Code / das gleich Python-Modul
Nein , P3 nutzt python3-pygame und P2 nutzt python-pygame.
Beschwert
In P3 haben die Funktionen pygame.font.Font und pygame.transform.smoothscale Exceptions geworfen.
Nein, P3 nutzt python3-pygame und P2 nutzt python-pygame.
Doch, das sind nur unterschiedliche Debian-Pakete (PyGame ist teilweise in C geschrieben). Es wird der gleiche Code verwendet: https://github.com/pygame/pygame
In P3 haben die Funktionen pygame.font.Font und pygame.transform.smoothscale Exceptions geworfen.
WELCHE?
Hast du die gleiche PyGame-Version in Python 2 und 3 in Verwendung?
Hallo,
ZitatEs wird der gleiche Code verwendet: https://github.com/pygame/pygame
Das meinte ich auch bzw. darauf zielte meine Frage ab. Viele Projekte haben ja die gleiche Codebasis für P2 und P3.
Gruß, noisefloor
Hallo
noisefloor und Linus für mich ist Python keine Muttersprache, deshalb tue ich mich schwer Euch zu verstehen bzw. richtig zu fragen.
Die Lösung:
Info: h = 320
font_size = h/14
wird in P2 und in P3 unterschiedlich interpretiert:
Die P3 Tracebacks waren eine Folge davon.
root@pipaos4:/usr/local/lib/newtron-v2# python3 newtron-radio-mig.py
trying fbcon
using fbcon
Display area size: 480 x 320
connected using unix socket...
font_size = 22.857142857142858 # nach "font_size = h/14"
font_size = 22.857142857142858 # vor pygame.font.Font
Traceback (most recent call last):
File "newtron-radio-mig.py", line 1802, in <module>
read_skin_config()
File "newtron-radio-mig.py", line 566, in read_skin_config
font = pygame.font.Font(skin_font, font_size)
TypeError: integer argument expected, got float
Alles anzeigen
P2 läuft ohne Fehler:
root@pipaos4:/usr/local/lib/newtron-v2# python newtron-radio.py
trying fbcon
using fbcon
Display area size: 480 x 320
connected using unix socket...
font_size = 22 # nach "font_size = h/14"
font_size = 22 # vor "pygame.font.Font"
Schönen Gruß, kle
Hallo,
axo - ja, das ist so: wenn du in Python zwei Integer dividierst, bekommst du immer einen Integer zurück. Auch, wenn das Ergebnis eigentlich ein Float wäre. Dann rundet Python 2 immer ab. Python 3 rechnet "richtig", d.h. liefert wenn die Division nicht glatt ist, einen Float zurück. Das ist aber auch bei den Unterschieden P2 <-> P3 dokumentiert.
Du musst deinen Code halt leicht anpassen, z.B. in dem du `font_size = int(h/14)` schreibst. Läuft so auch unter P2 und liefert unter P3 das gewünschte Ergebnis.
Gruß, noisefloor
Danke,
das hatte ich auch schon so gemacht.
Jetzt beschäftige ich mich mit SVG Grafik.
Die (pseudografische) Oberfläche von newtron-radio besteht aus skalierten SVG-Grafiken.
Das habe ich für Python3 minimal-invasiv geändert, (weil kaa.imlib2 nur in Python2 läuft).
Bei genauer Betrachtung fallen mir an einzelnen Stellen Unterschiede zwischen P2 und P3 auf.
(An einer bestimmten Stelle links unten, sind einzelne Striche heller. Auch Check-Boxen erscheinen heller. Liegt das an der Koordinatenberechnung?)
Das ist ein ungelöstes Rätsel für mich. Ich habe keine Ahnung von Bildverarbeitung.
Es gibt eine zentrale Funktion pygame_svg. Die originale läuft nur mit Python2, die geänderte nur unter Python3.
Angeregt vom Peppy Player, habe ich kaa.imlib2 (läuft nicht unter Python3) ersetzt durch pynanosvg.
def pygame_svg(svg_file, color, size):
with open(svg_file, "r+") as f:
svgbuf = f.read()
colorstr = '#%02x%02x%02x' % color
svgbuf = svgbuf.replace("#00ffff", colorstr)
#svg = imlib2.open_from_memory(svgbuf,size)
#strbuf = str(svg.get_raw_data(format='RGBA'))
#image = pygame.image.frombuffer(strbuf, size, "RGBA").convert_alpha()
try:
svg_image = Parser.parse(svgbuf)
except:
#logging.debug("Problem parsing file %s", svg_file)
print("Problem parsing file %s", svg_file)
return None
w = svg_image.width
h = svg_image.height
(w_size, h_size) = size
w_final = int(w_size)
h_final = int(h_size)
scale_factor = min(w_final/w, h_final/h)
r = Rasterizer()
strbuf = r.rasterize(svg_image, w_final, h_final, scale_factor)
image = pygame.image.frombuffer(strbuf, (w_final, h_final), "RGBA").convert_alpha()
return image
Alles anzeigen
def pygame_svg(svg_file, color, size):
with open(svg_file, "r+") as f:
svgbuf = f.read()
colorstr = '#%02x%02x%02x' % color
svgbuf = svgbuf.replace("#00ffff", colorstr)
svg = imlib2.open_from_memory(svgbuf,size)
strbuf = str(svg.get_raw_data(format='RGBA'))
image = pygame.image.frombuffer(strbuf, size,"RGBA").convert_alpha()
return image
Schönen Gruß, kle
Hallo,
ZitatBei genauer Betrachtung fallen mir an einzelnen Stellen Unterschiede zwischen P2 und P3 auf.
Pauschal würde ich sagen: soll eigentlich nicht sein. SVG ist ja ein Grafikformat, was den darzustellenden Inhalt als XML beschreibt. Das XML in ein Bild umzuwandeln ist dann Sachen der Rendering-Engine.
Grundsätzlich könnte es schon sein, dass verschiedene Rendering-Engines ein leicht anders Ergebnis liefern oder das beim Umskalieren der Grafik das ganze anders wirkt. Lässt sich so von aussen aber schlecht sagen.
Gruß, noisefloor
Hallo,
ich bin hartnäckig.
+---------------------------------------+
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
+---------+---------+---------+---------+
|xxxxxxxxx|xxxxxxxxx|xxxxxxxxx|xxxxxxxxx|
+---------+---------+---------+---------+ (Info: die x sollen Leerzeichen sein
|Artefakte|xxxxxxxxx|xxxxxxxxx|xxxxxxxxx| aber mehrere Leerzeichen hintereinander
+---------+---------+---------+---------+ werden gefressen)
Das Hauptfenster besteht aus 9 SVG-Dateien (Ausschnitten). Der mit "Artefakte" beschriftete Ausschnitt ist besonders auffällig.
Beim Schreiben fällt mir ein, daß das Problem möglicherweise mit den Positionen der SVGs und nicht mit ihrer Höhe und Breite zusammenhängt.
Vielleicht haben sich die Werte der Positionen durch Berechnung in Python3 verändert?
Werde ich mal anschauen.
Schönen Gruß, kle
Hast Du vielleicht mal einen Screenshot?
Hallo Zusammen,
ich möchte für mich ein kleines Programm schreiben, dass mir Zeichenketten und / oder Zahlen "verändert".
Hier ein kleines Beispiel:
AbC sollte zum Beispiel in DeF umgewandelt werden. Also quasi um 3 Stellen im Alphabet erhöht werden.
oder
123 sollte in 456 umgewandelt werden.
Es muss keine grafische Oberfläche haben, es würde auf der Commandozeile reichen.
Ist sowas mit Python umsetzbar?
Ja ohne Weiteres
zB mit maketrans()
Edit:
arbeite dich mal hier durch: http://www.pythonchallenge.com
Aufgabe 2 oder 3 geht in deine Richtung.
Vielen Dank schon mal!
Werde mir auch den Link so bald wie möglich ansehen!
Gleich noch eine Frage vorab. Ist es auch möglich wieder in die andere Richtung zu gehen? Also dass aus
DeF wieder AbC wird?
Ja. So eine Caesar-Verschlüsselung/Entschlüsselung wäre eh eine gute Einsteigeraufgabe.
Wunderbar! Das ist genau das was ich gesucht habe.
Und bezüglich Ver-/Entschlüsseln, ist auch auf Anhieb relativ leicht zu lösen mit maketrans(). Es muss ja eigentlich nur der Input und Output umgedreht werden
(intab, outtab) in (outtab, intab)
Hallo zusammen,
dies ist das erste Forum, das ich jemals genutzt habe. Ich erhoffe mir, durch direkte Fragen zu direkten Antworten zu kommen, was mittels Google sehr oft nicht so gut funktioniert.
Und zwar folgendes:
Mein Script startet per subprocess.Popen eine URL im chromium-browser.
Anschließend gibt es im Script eine Eingabemöglichkeit (input).
Problem dabei: Der geöffnete Browser ist nun im Vordergrund und die getätigte Eingabe erfolgt demzufolge im Browser und nicht, wie gewünscht, im Script.
Das Script soll ohne Monitor laufen, deshalb kann ich das Problem nicht einfach durch manuelles Klicken auf das Script lösen.
Gibt es eine Möglichkeit, den Browser zu starten und dabei das Script als aktives Fenster bestehen zu lassen?
Riecht nach einem XY Problem... Warum öffnest du einen Browser, wenn du keinen Monitor angeschlossen hast?!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!