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: 4200
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: 13126
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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
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