Skip to content

Qt 5 Designer

Python3
  • ich habe die Tage mal den Qt 5 Designer ausprobiert.

    3d38ec8c-d60c-41a9-a290-a1edc561f037-grafik.png

    Installation

    apt://qttools5-dev-tools
    

    Und da ich hier das erste Mal auf apt:// gestoßen bin, habe ich mal nachgesehen, was das ist.

    apturl ist eine kleine Ergänzung für Firefox, Epiphany und apt-get, das die Installation von Paketen über die Adresszeile des Browsers bzw. durch einen simplen Linksklick linke Maustaste erlaubt. Mit einem kleinen manuellen Eingriff kann man apturl auch mit anderen Browsern nutzen.

    Wenn man auf so einen Link klickt, kommt folgendes Fenster im FF

    87d39baf-88ee-415c-97ca-c1b5f62c117e-image.png

    Damit kann man dann den Designer installieren.

    Test Programm

    Mein kleines Testprogramm, was nichts anderes macht, als das UI zu laden und anzuzeigen.

    from PyQt6 import QtWidgets, uic
    import sys
    
    class Ui(QtWidgets.QMainWindow):
        def __init__(self):
            super(Ui, self).__init__() # Call the inherited classes __init__ method
            uic.loadUi('test.ui', self) # Load the .ui file
            self.show() # Show the GUI
    
    app = QtWidgets.QApplication(sys.argv) # Create an instance of QtWidgets.QApplication
    window = Ui() # Create an instance of our class
    app.exec() # Start the application
    

    Das UI sieht so aus test.ui

      GNU nano 4.8                                                                                                                                               test.ui                                                                                                                                                          
       <string>Restic UI</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <widget class="QListView" name="listView">
        <property name="geometry">
         <rect>
          <x>0</x>
          <y>0</y>
          <width>1131</width>
          <height>551</height>
         </rect>
        </property>
       </widget>
       <widget class="QWidget" name="horizontalLayoutWidget">
        <property name="geometry">
         <rect>
          <x>0</x>
          <y>0</y>
          <width>1131</width>
          <height>541</height>
         </rect>
        </property>
        <layout class="QHBoxLayout" name="horizontalLayout">
         <property name="sizeConstraint">
          <enum>QLayout::SetDefaultConstraint</enum>
         </property>
        </layout>
       </widget>
       <zorder>horizontalLayoutWidget</zorder>
       <zorder>listView</zorder>
      </widget>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>1125</width>
         <height>21</height>
        </rect>
       </property>
       <widget class="QMenu" name="menuTest">
        <property name="title">
         <string>File</string>
        </property>
        <addaction name="actionLoad_File"/>
        <addaction name="actionAdd_Backup"/>
        <addaction name="actionEdit_Backup"/>
        <addaction name="actionDelete_Backup"/>
       </widget>
       <addaction name="menuTest"/>
      </widget>
      <widget class="QStatusBar" name="statusbar"/>
      <action name="actionLoad_File">
       <property name="text">
        <string>Load File</string>
       </property>
      </action>
      <action name="actionAdd_Backup">
       <property name="text">
        <string>Add Backup</string>
       </property>
      </action>
      <action name="actionEdit_Backup">
       <property name="text">
        <string>Edit Backup</string>
       </property>
      </action>
      <action name="actionDelete_Backup">
       <property name="text">
        <string>Delete Backup</string>
       </property>
      </action>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    Das gestartete Programm sieht so aus

    e7603057-14e9-4c06-b383-748768119084-grafik.png

    Was mich bei einem kurzen Test etwas verwirrt hat ist, das UI ist nicht responsiv. In dem Beispiel ist ein List View. Wenn ich das Fenster größer ziehe, bleibt die Größe des List View fix. In meinem Restic UI, erstellt mit PyQt6, ändert sich das so wie man es erwartet. Ich habe vermutlich nicht das Konzept dahinter verstanden, kommt aber noch - hoffe ich.

    eaf34d13-5298-4fd5-9370-d3bf11dd8a02-grafik.png

  • Pycharm - Interpreter Settings

    Python3
    1
    2
    0 Stimmen
    1 Beiträge
    145 Aufrufe
    Niemand hat geantwortet
  • Vorstellung Restic UI Flask

    Restic UI Flask
    1
    6
    0 Stimmen
    1 Beiträge
    228 Aufrufe
    Niemand hat geantwortet
  • Restic UI - Stand Januar 2023

    PyWebIO
    1
    0 Stimmen
    1 Beiträge
    127 Aufrufe
    Niemand hat geantwortet
  • Python - Frameworks

    Python3
    2
    0 Stimmen
    2 Beiträge
    137 Aufrufe
    FrankMF
    Und mal hier parken https://www.youtube.com/watch?v=Tucr8Ta-kq4&t=1911s
  • Vorstellung Restic UI als PyWebIO Version

    PyWebIO
    7
    0 Stimmen
    7 Beiträge
    229 Aufrufe
    FrankMF
    https://gitlab.com/Bullet64/restic_ui_pywebio/-/commit/45c83cd8c38f466e427046b0f123c23def1bd7ca
  • Example Class

    Angeheftet Python3
    3
    0 Stimmen
    3 Beiträge
    165 Aufrufe
    FrankMF
    In meinem PywebIO Projekt tauchte heute ein alter Bekannter auf. Wenn ich einen Eintrag (innerhalb der Liste) löschte, war das etwas durcheinander Ja, den Fehler kenne ich schon was länger und stolper immer mal wieder drüber. Heute z.B. Also mal grübeln Das mache ich, wenn ich einen Eintrag lösche case 'Yes': # delete entrie BackupList.delete((line - 1)) # save json BackupList.save_json() # Load data from filesystem BackupList.load_json() # Reload Tab Backup backup() Ich mache folgendes lösche den Eintrag speicher die Liste lade die Liste baue den Tab wieder auf Das führt aber dazu, das meine Liste die als Objekt im Speicher steht nicht aktuell ist. Im Gegenteil, da ist dann etwas Unordnung. Ich brauchte also die Möglichkeit mein Objekt backups irgendwie zurückzusetzen. Mal gegoogelt und die Dinge sind manchmal wirklich total easy # clear dict backups.clear() Das leert das Objekt und im nächsten Schritt kann ich es wieder befüllen. Lösung case 'Yes': # delete entrie BackupList.delete((line - 1)) # save json BackupList.save_json() # clear dict backups.clear() # Load data from filesystem BackupList.load_json() # Reload Tab Backup backup() Problem erledigt. Damit ich das noch finde, wenn mein Kopf das nicht mehr hergibt, notiere ich das hier.
  • Python3 - VSCodium Language Settings

    Python3
    3
    3
    0 Stimmen
    3 Beiträge
    171 Aufrufe
    FrankMF
    Ich habe da jetzt gestern stundenlang mit rum gespielt, insbesondere Deinstallation, Neuinstallation, VSCode Installation usw. Das ging einfach nicht. Irgendwo meine ich dann gelesen zu haben, das VSCode auf python 3.9 festgenagelt ist und deswegen so einige Dinge nicht gehen. Nagelt mich darauf nicht fest, ich bin in dieser Coding Welt kein Profi. Dann fiel mir ein, das ich schon vor einigen Monaten mal kurz einen Blick in Pycharm geworfen hatte. Gefiel mir damals gar nicht. Das habe ich heute mal auf die Platte geworfen um zu schauen, ob das vernünftig mit dem o.g. Problem umgehen kann. [image: 1662928323311-6f1c3906-05a3-4126-81d4-7fdf6aa27faa-grafik.png] Puuuh, da kann man ja noch viel mehr einstellen als bei VSCode, oder mindestens ähnlich viel. Das kann einen ganz schön überfordern. Also Stück für Stück die nächsten Tage. Was ist mir positiv aufgefallen? Wenn ich VSCodium neu installiert habe, habe ich unheimlich mit Python Versionen, pipenv usw. zu kämpfen gehabt. Bis da mein Projekt wieder lief, konnte schon mal was Zeit vergehen. Mit Pycharm Ordner ausgewählt, angeklickt das man dem Coder vertraut. Noch eine Python Version ausgewählt, danach fragt er das er eine pipenv Umgebung gefunden hat und diese nutzen möchte. Ja angeklickt und fertig. Keine zwei Minuten und das Projekt lief wieder Erster Git Commit ging auch sofort und ohne Murren. Schon mal ganz viele Pluspunkte gesammelt. Was mich aktuell beschäftigt, ist der Tab Problems, da hatte ich vorher deutlich weniger. Da muss ich mich noch was einarbeiten und schauen, wo man das alles einstellen kann. Ich halte euch auf dem Laufenden.. Vielleicht fliegt ja das VSCo** Zeug runter!? Mal sehen..
  • PyQt6 - QSettings

    Python3
    3
    0 Stimmen
    3 Beiträge
    394 Aufrufe
    FrankMF
    Möglichkeit 1 Das hier settings = QSettings("Frank_Mankel", "Restic_UI") erzeugt unter /home/frank/.config/Frank_Mankel/Restic_UI.conf die Konfigurationsdatei. Möglichkeit 2 Das hier settings = QSettings("Restic_UI") erzeugt unter /home/frank/.config/Restic_UI.conf die Konfigurationsdatei. Damit habe ich die grundlegenden Dinge, hoffentlich , verstanden. Für den Rest mal in die Dokumentation schauen. Sehr hilfreich war auch mal ein Blick auf die Definition der Klasse. Rechtsklick auf QSettings und dann Go to Definition class QSettings(QObject): class Scope(enum.Enum): UserScope = ... # type: QSettings.Scope SystemScope = ... # type: QSettings.Scope class Format(enum.Enum): NativeFormat = ... # type: QSettings.Format IniFormat = ... # type: QSettings.Format InvalidFormat = ... # type: QSettings.Format class Status(enum.Enum): NoError = ... # type: QSettings.Status AccessError = ... # type: QSettings.Status FormatError = ... # type: QSettings.Status [..gekürzt..]