ubuntu 22.04 hat ganz andere Paketnamen wie 20.04. Programm von 20.04

Probleme bei der Installation?
Antworten
egerlach
User
Beiträge: 43
Registriert: Samstag 14. März 2009, 21:32

Hallo,
die python-Paketnamen haben sich mit 22.04 heftig geändert. Was muss ist für Pakete unter 22.04 installieren, damit ich das Programm zum laufen bekomme mit den "import XY.." ?

Code: Alles auswählen

#!/usr/bin/python3                                                                                                                                                                           
# -*- coding: utf-8 -*-    
import sys

from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

# you can change settings right here:                                                                                                                                                        
frame_width = 13
#                          R  G  B                                                                                                                                                           
frame_color = QtGui.QColor(0, 100, 0)

# calculates actual size of frame in pixels                                                                                                                                                  
frame_size = round(float(frame_width) / 2) * 2

# main window class                                                                                                                                                                          
class main_window(QMainWindow):
    def __init__(self, size = None, parent = None):
    [...]
Habe mir das noch notiert, vermutlich für 18.04 mit qt4:
apt-get install libqt4-dev python-qt4 qt4-dev-tools python-qt4-dev pyqt4-dev-tools python3-pyqt4 python3 python3-pyside

Wer kennt sich aus?
Gruß
Eckard
Benutzeravatar
sparrow
User
Beiträge: 4634
Registriert: Freitag 17. April 2009, 10:28

Na, ich weiß ja nicht, wo sich da Paketnamen "heftig" geändert haben, aber ich würde einfach mal "python3-pyqt" installieren und hoffen, dass alle Abhängigkeiten sauber nachgezogen werden.
Benutzeravatar
__blackjack__
User
Beiträge: 14302
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Also wenn das vorher `python3-pyqt4` war, dann dürfte sich da maximal an den Zahlen was geändert haben. Für `PyQt5` wie im Quelltext zu sehen ist, braucht man dann logischerweise `python3-pyqt5`. Und zumindest für den gezeigten Quelltextausschnitt sollte das auch das einzige Paket sein was benötigt wird.

Anmerkungen zum Quelltext:

Sternchen-Importe sind Böse™. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen. Da sowohl `QtCore` und `QtGui` importiert werden, als auch *alles* aus diesen beiden Modulen, wonach wurde denn entschieden wann über welchen Weg Werte aus diesen Modulen verwendet werden?

Konstanten werden per Konvention KOMPLETT_GROSS geschrieben und Klassennamen in „PascalCase“. Also `FRAME_WIDTH` und `MainWindow`.

Bei `frame_size` ist das `round()` fragwürdig. Folgendes ist *nicht* überraschend‽

Code: Alles auswählen

In [732]: round(1.5)
Out[732]: 2

In [733]: round(2.5)
Out[733]: 2

In [734]: round(3.5)
Out[734]: 4

In [735]: round(4.5)
Out[735]: 4
Der `float()`-Aufruf ist überflüssig:

Code: Alles auswählen

In [736]: float(13) / 2
Out[736]: 6.5

In [737]: 13 / 2
Out[737]: 6.5
Falls die nächstkleinere durch zwei teilbare Zahl gesucht ist, wären das folgende Alternativen:

Code: Alles auswählen

FRAME_SIZE = FRAME_WIDTH // 2 * 2

# oder

FRAME_SIZE = FRAME_WIDTH & ~1
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
egerlach
User
Beiträge: 43
Registriert: Samstag 14. März 2009, 21:32

Dankeschön an beide Helfer hier!!
Ein

Code: Alles auswählen

aptitude install python3-pyqt5
Hat alles notwendige installiert und das python Skript wieder zum laufen gebracht, es crash'te dann bei diesem Befehl:

Code: Alles auswählen

painter.drawText((self.width()) / 2 - font_width / 3, (self.height() - font_height) / 2 + font_height, dim_text)

mit: 

  File "/usr/local/bin/myframe", line 117, in paintEvent
    painter.drawText((self.width()) / 2 - font_width / 3, (self.height() - font_height) / 2 + font_height, dim_text)
TypeError: arguments did not match any overloaded call:
  drawText(self, Union[QPointF, QPoint], str): argument 1 has unexpected type 'float'
  drawText(self, QRectF, int, str): argument 1 has unexpected type 'float'
  drawText(self, QRect, int, str): argument 1 has unexpected type 'float'
[...]
Ein Verdoppeln des "/" auf

Code: Alles auswählen

painter.drawText((self.width()) // 2 - font_width // 3, (self.height() - font_height) // 2 + font_height, dim_text)
und schon gehts einwandfrei!! 1000 Dank!!

PS: es ist ein kleines Skript mit 100 LOC, das mit import * sollte dann verziehen werden. Danke für den Hinweis wegen dem "import *"
Antworten