Skip to content

Python3 - PyQt5 QIcon

Python3
  • Ich habe für mein Projekt, die Icons in einem Ordner abgelegt und von dort benutzt. Viel Aufwand, weil man die erst suchen muss, in den Ordner kopieren usw.

    Gestern beim Dokumentation lesen bin ich mal wieder über was gestolpert, was ich testen musste 😉

    Alt

    #----JSON Menu ----#
            loadJSON = QAction(QIcon.('icons/reload.svg'), 'Load File', self)
            loadJSON.triggered.connect(BackupList.load_json)
            loadJSON.setShortcut('Ctrl+L')
            fileMenu.addAction(loadJSON)
    

    Neu

    #----JSON Menu ----#
            loadJSON = QAction(QIcon.fromTheme('reload'), 'Load File', self)
            loadJSON.triggered.connect(BackupList.load_json)
            loadJSON.setShortcut('Ctrl+L')
            fileMenu.addAction(loadJSON)
    

    Damit lädt das Programm die Icons des gewählten Themes des Betriebssystemes. Bei mir ist das aktuell

    7e021618-77af-4da9-9d2d-470b4f546e59-image.png

    und sieht so aus

    fd84fdb6-d928-4f99-998d-fccb00536657-image.png

    Wenn man jetzt das Theme wechselt, merkt man das viele Icons nicht vorhanden sind 😞 Ok, mal weiterlesen, wie man das löst...

    Es gibt eine Liste mit alle Icon Bezeichnungen -> https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html

    Und unter LinuxMint Cinnamon findet man die Icons unter z.B. /usr/share/icons/Mint-Y/actions/16

  • Die Suchpfade findet man hiermit

    print(QIcon.themeSearchPaths())
    

    Ausgabe

    ['/home/frank/.icons', '/usr/share/cinnamon/icons', '/var/lib/flatpak/exports/share/icons', '/usr/share/icons', ':/icons']
    

  • Python3 - pyqtSignal

    Python3
    1
    0 Stimmen
    1 Beiträge
    96 Aufrufe
    Niemand hat geantwortet
  • Restic UI - Changelog

    Angeheftet Restic UI
    3
    0 Stimmen
    3 Beiträge
    314 Aufrufe
    FrankMF
    v1.5.0 - Release for restic v0.14.0 with compression and migration tool
  • Python3 - class BackupList

    Python3
    2
    0 Stimmen
    2 Beiträge
    237 Aufrufe
    FrankMF
    Mir hat heute jemand auf Twitter zu meinem Problem geantwortet. https://twitter.com/OliverTheUnique/status/1381888728080211968 Das habe ich natürlich direkt, bei einer Tasse Kaffee, ausprobiert. Geht einwandfrei und ein Problem ist damit Vergangenheit. Bei meiner Konstruktion musste ich immer eine Länge für die Liste p vorgeben. p = list(range(10)) Das wird jetzt nicht mehr benötigt. Schön Jetzt muss ich mir das noch in Ruhe anschauen, nachlesen und verstehen. Danke für den netten Hinweis!
  • Python3 - QSettings

    Python3
    1
    0 Stimmen
    1 Beiträge
    157 Aufrufe
    Niemand hat geantwortet
  • Python3 - virtuelle Entwicklungsumgebung

    Angeheftet Python3
    3
    0 Stimmen
    3 Beiträge
    346 Aufrufe
    FrankMF
    Nach Systemwechsel erneut Probleme. Hier noch mal aufgelistet. Aufpassen, das kein venv Ordner vorhanden ist! Neu anlegen! python3 -m venv venv Dann meckert mein Linux Mint Cinnamon The virtual environment was not created successfully because ensurepip is not available. On Debian/Ubuntu systems, you need to install the python3-venv package using the following command. apt install python3.8-venv You may need to use sudo with that command. After installing the python3-venv package, recreate your virtual environment. Failing command: ['/home/frank/Restic_UI_Produktiv/restic-ui-public/venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip'] Ok, das ist einfach apt install python3.8-venv python3 -m venv venv Danach aktivieren source venv/bin/activate Installation von PyQt5 (venv) frank@frank-MS-7C37:~/Restic_UI_Produktiv/restic-ui-public$ pip3 install PyQt5 Collecting PyQt5 Downloading PyQt5-5.15.4-cp36.cp37.cp38.cp39-abi3-manylinux2014_x86_64.whl (8.3 MB) |████████████████████████████████| 8.3 MB 1.7 MB/s Collecting PyQt5-Qt5>=5.15 Downloading PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl (59.9 MB) |████████████████████████████████| 59.9 MB 18.3 MB/s Collecting PyQt5-sip<13,>=12.8 Downloading PyQt5_sip-12.9.0-cp38-cp38-manylinux1_x86_64.whl (332 kB) |████████████████████████████████| 332 kB 46.1 MB/s Installing collected packages: PyQt5-Qt5, PyQt5-sip, PyQt5 Successfully installed PyQt5-5.15.4 PyQt5-Qt5-5.15.2 PyQt5-sip-12.9.0 Danach meckert er über ein fehlendes Modul requests (venv) frank@frank-MS-7C37:~/Restic_UI_Produktiv/restic-ui-public$ python3 restic_ui.py Traceback (most recent call last): File "restic_ui.py", line 41, in <module> from functions import ( File "/home/frank/Restic_UI_Produktiv/restic-ui-public/functions.py", line 19, in <module> import requests as req ModuleNotFoundError: No module named 'requests' Installation requests (venv) frank@frank-MS-7C37:~/Restic_UI_Produktiv/restic-ui-public$ pip3 install requests Collecting requests Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB) |████████████████████████████████| 61 kB 802 kB/s Collecting chardet<5,>=3.0.2 Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB) |████████████████████████████████| 178 kB 2.7 MB/s Collecting certifi>=2017.4.17 Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB) |████████████████████████████████| 145 kB 14.0 MB/s Collecting idna<3,>=2.5 Downloading idna-2.10-py2.py3-none-any.whl (58 kB) |████████████████████████████████| 58 kB 9.4 MB/s Collecting urllib3<1.27,>=1.21.1 Downloading urllib3-1.26.6-py2.py3-none-any.whl (138 kB) |████████████████████████████████| 138 kB 11.5 MB/s Installing collected packages: chardet, certifi, idna, urllib3, requests Successfully installed certifi-2021.5.30 chardet-4.0.0 idna-2.10 requests-2.25.1 urllib3-1.26.6 Und schwupps, geht mein Tool wieder [image: 1625848253488-4968ce42-7c66-4c8a-a2ad-424b9a529d87-grafik.png]
  • Python3 - Eingabeformular

    Python3
    3
    +0
    0 Stimmen
    3 Beiträge
    214 Aufrufe
    FrankMF
    Meine endgültige Lösung, zu mindestens im Moment , ist ein zweites Window. Das gefällt mir am Besten, komme ich zu mindestens im Moment einfach besser mit klar. Aber, eines der größten Probleme war für mich, wie aktualisiere ich die Liste im Hauptfenster!? Da habe ich doch etliche Stunden dran rum gefummelt.... Hier nur mal das Layout ##################### # Layout ##################### self.formGroupBox = QGroupBox("Form layout") layout = QFormLayout() layout.addRow(self.label_1) layout.addRow(QLabel("Backup Name:"), self.input1) layout.addRow(QLabel("Repository:"), self.button3) layout.addRow(QLabel("Source:"), self.button4) layout.addRow(QLabel("Password:"), self.input4) layout.addRow(self.label_6) layout.addRow(self.button2) self.formGroupBox.setLayout(layout) self.setLayout(layout) Das mit dem SecondWindow ist aber was aufwändiger. Da mach ich dann mal einen eigenen Beitrag zu. Aktuell sieht das so aus. [image: 1604819923887-6c68c956-9127-438f-bc54-4dcef8e18f00-image.png]
  • Python3 - JSON

    Python3
    3
    +0
    0 Stimmen
    3 Beiträge
    208 Aufrufe
    FrankMF
    [image: 1603645936018-ede1a88a-5183-4f85-a602-27650362d532-grafik.png] Die Backups sollen Namen haben, also habe ich das erweitert. Jetzt sollen diese als Liste rechts angezeigt werden. Das mache ich wie folgt. for key in backups: print(backups[key]['name'], key) liste = backups[key]['name'] + " ID: " + key self.listWidget.addItem(liste) Mittels des Keys kann ich auf den Namen zugreifen und die Liste damit füllen. Aktuell habe ich noch den Key hinten angefügt, weil ich noch keine Idee habe, wie ich die Backups anders verarbeiten soll. Aber, Stück für Stück. Der Backup-Name wird nach Auswahl in der Statusbar angezeigt. So weit klappt das so wie ich mir das vorstelle. Für heute ist Feierabend
  • Python3 - RegEx für ein LineEdit

    Python3
    2
    +0
    0 Stimmen
    2 Beiträge
    180 Aufrufe
    FrankMF
    Gut, Menschen die mich kennen, wissen das IPv6 nicht so mein Spezialgebiet ist. Es hilft aber nichts, auch damit muss man sich beschäftigen Es war etwas schwierig was Passendes zu finden, aber ich denke das hier ist ganz gut. Ob es alle Möglichkeiten bei IPv6 beinhaltet, weiß ich nicht zu 100%. Hier eine Seite, wo ich was Passendes gefunden habe. https://ihateregex.io/expr/ipv6/ Code # regex für IPv6 reg_ex = QRegExp('^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$') input_validator = QRegExpValidator(reg_ex, self.lineedit2_ipv6) self.lineedit2_ipv6.setValidator(input_validator) Ein paar Test von mir ergaben, das es so aussieht als wenn es funktioniert