Skip to content

Python3 - PyQt5 Layout

Python3
1 1 206
  • Heute mal was hier speichern, es geht einmal um ein QFormLayout, was einem einspaltigen Eingabeforumlar entspricht, wo man vorne noch einen Text hinzufügen kann. Und dann als Beispiel ein QGridLayout, was einem mehrspaltigen Aufbau entspricht.

    QFormLayout

    Vorne Bezeichnung, danach das Inputfeld.

    # Create an 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(QLabel("Exclude List *"), self.button5)
    layout.addRow(self.label_7)
    layout.addRow(self.label_6)
    layout.addRow(self.button2)
    

    Ergibt so was hier

    96741eff-bf6c-4c48-9c2c-c87e4182eaa1-grafik.png

    QGridLayout

    Vorne ein Label mit Text, dann ein Inputfeld und Ende ein Button, der hier einen Dateidialog lädt.

    #####################
    # Layout
    #####################
    
    # Create an layout
    self.formGroupBox = QGroupBox("Form layout")
    layout = QGridLayout()
    
    layout.addWidget(self.label_1, 0, 0)
    layout.addWidget(QLabel("Backup Name"), 1,0)
    layout.addWidget(self.input1, 1, 1)
            
    layout.addWidget(QLabel("Repository"), 2,0)
    layout.addWidget(self.button3, 2, 2)
    layout.addWidget(self.input2, 2, 1)
            
    layout.addWidget(QLabel("Source"), 3,0)
    layout.addWidget(self.button4, 3, 2)
    layout.addWidget(self.input3, 3, 1)
            
    layout.addWidget(QLabel("Password"), 4,0)
    layout.addWidget(self.button3, 1, 2)
    layout.addWidget(self.input4, 4, 1)
            
    layout.addWidget(QLabel("Exclude List *"), 5,0)
    layout.addWidget(self.button5, 5, 2)
    layout.addWidget(self.input5, 5, 1)
            
    layout.addWidget(self.label_7, 6, 0)
            
    layout.addWidget(self.label_6, 7, 0)
            
    layout.addWidget(self.button2, 8 ,0)
        
    self.formGroupBox.setLayout(layout)
    self.setLayout(layout)
    

    Ergibt dann das hier

    6e6dae58-be7d-4146-8ed0-933577e30b9d-grafik.png

  • Python3 - PyQt6 installieren

    Python3 pyqt6 python3
    1
    0 Stimmen
    1 Beiträge
    438 Aufrufe
    Niemand hat geantwortet
  • Restic UI - QtWaitingSpinner unexpected type 'float'

    Restic UI restic-ui python3
    2
    0 Stimmen
    2 Beiträge
    320 Aufrufe
    FrankMF
    Der Autor hat meine Anpassungen um ein paar Änderungen erweitert und in sein Repo eingepflegt. Der QtWaitingSpinenr ist jetzt auch 3.10 kompatibel [image: 1641634993220-1b268980-92ca-42a4-89a0-a6e4b7ab9378-grafik.png]
  • Restic UI - QThread

    Restic UI restic-ui python3
    1
    0 Stimmen
    1 Beiträge
    159 Aufrufe
    Niemand hat geantwortet
  • Python3 - Umzug nach Fedora 34

    Python3 python3
    1
    0 Stimmen
    1 Beiträge
    209 Aufrufe
    Niemand hat geantwortet
  • Python3 - Global variable 'widget' undefined at the module level

    Python3 python3
    3
    0 Stimmen
    3 Beiträge
    471 Aufrufe
    FrankMF
    Kein globalen Variablen mehr im Projekt Das Widget ließ sich relativ einfach erledigen. Vorher #----QPlainTextEdit ----# layout = QVBoxLayout() widget = QTextEdit() widget.setReadOnly(True) widget.setLayout(layout) setCentralWidget(widget) Nachher #----QPlainTextEdit ----# layout = QVBoxLayout() self.widget = QTextEdit() self.widget.setReadOnly(True) self.widget.setLayout(layout) self.setCentralWidget(self.widget) Aufruf dann nicht mehr mit # UI widget.setHtml("") sondern mit # UI mainWin.widget.setHtml("") Problem erledeigt und hoffentlich auch verstanden
  • Python3 - String-Operatoren

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

    Angeheftet Python3 python3
    3
    0 Stimmen
    3 Beiträge
    450 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 - RegEx für ein LineEdit

    Python3 pyqt5 python3
    2
    1
    0 Stimmen
    2 Beiträge
    241 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