Skip to content

Qt 5 Designer

Python3
1 1 145
  • 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

  • FreeOTP+ Datenumzug nach Bitwarden Authenticator

    Python3 ki-generiert python
    1
    0 Stimmen
    1 Beiträge
    230 Aufrufe
    Niemand hat geantwortet
  • Pycharm - Interpreter Settings

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

    Restic UI Flask restic restic-ui flask python
    1
    6
    0 Stimmen
    1 Beiträge
    305 Aufrufe
    Niemand hat geantwortet
  • PyWebIO vs. Flask

    Python3 pywebio flask linux python
    2
    0 Stimmen
    2 Beiträge
    266 Aufrufe
    FrankMF
    Mist, jetzt habe ich auch noch Streamlit gefunden. Jetzt geht mir langsam die Zeit aus...
  • Python & Redis-Datenbank

    Verschoben Linux python redis
    3
    0 Stimmen
    3 Beiträge
    203 Aufrufe
    FrankMF
    Heute dann die nächste Herausforderung. Mein JSON soll so aussehen, damit ich das entsprechend erweitern kann. Stocks {0: {'stockname': 'Deutsche Telekom Aktie', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 100}, 1: {'stockname': 'Henkel', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 50}} Die Daten sollen wie oben schon ausprobiert, in einer Redis Datenbank liegen. So weit auch kein großes Problem. ABER, der Zugriff auf diese Daten war dann meine nächste Hürde Ok, ich habe also mehrere Einträge im JSON File bzw. in der Datenbank. Wie komme ich da nun wieder dran. Ein paar später dann die Lösung. Wie komme ich an den einzelnen Eintrag, also über den Index?? r1.json().get('stocks', 1) Gibt als Ergebnis {'stockname': 'Henkel', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 50} Ok, das passt schon mal. Somit kann man dann gewohnt auf die einzelnen Elemente zugreifen. print("TESTING", testing['stockname']) Ausgabe TESTING Henkel Ok, Teil 1 erledigt. Jetzt habe ich ja irgendwann mehrere Elemente in der Liste und brauch dann den letzten Index , um damit was machen zu können. Also, z.B. durch die Daten zu loopen. objkeys = r1.json().objkeys('stocks') print("Objkeys", objkeys) Ausgabe Objkeys ['0', '1'] Ok, kommt eine Liste des Index zurück. Damit kann man arbeiten Ich hatte dann zum Testen mittels einer while Schleife die Daten geladen, aber jetzt beim Tippen klingelt es und wir machen das schön mit enumerate @staticmethod def load(): data = {} for count, value in enumerate(objkeys): testing = r1.json().get('stocks', count) data[count] = { "stockname": testing['stockname'], "wkn1": testing['wkn1'], "wkn2": testing['wkn2'], "quantity": testing['quantity']} return data Somit habe ich die Daten aus der Redis Datenbank in einem Objekt und kann damit arbeiten.
  • Python - Formatumwandlung str -> float

    Python3 python
    1
    0 Stimmen
    1 Beiträge
    933 Aufrufe
    Niemand hat geantwortet
  • List comprehensions

    Python3 python
    1
    2
    0 Stimmen
    1 Beiträge
    109 Aufrufe
    Niemand hat geantwortet
  • Example Class

    Angeheftet Python3 python json
    3
    0 Stimmen
    3 Beiträge
    231 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.