QTabWidget Size

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

Hallo zusammen

Die Kernfrage ist: Wie kann ich die Fenstergroesse in (MyWindow) anpassen?

jenachdem welchen Tab ich waehle sollt die Fenstergroesse nagepasst werden. Letztentlich die das Starttab(Fenster) kleiner als die anderen Fenster. z.b.
Tab 0 : w:150px h:600px
Tab n : w:1000px h:600px
Ich arbeite mit Widget weil ich eine eigene Titelbar (main_title) habe.

Evtl. ist ja der Grundansatz schon falsch. Kann mir hier bitte jemand helfen.

Code: Alles auswählen

from main_widget import Ui_Form
from main_title import TitleWindow
from main import MainWindowApp

from worklogapp.styles import MainStyleUI

class MyWindow(QWidget, Ui_Form):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)
        self.setupUi(self)

        self.tabs.currentChanged.connect(self.tab_changed_update_frm_)

    def tab_changed_update_frm_(self):
        tab = self.tabs.currentIndex()
        if tab == 0:
            self.setGeometry(50, 50, 150, 600)
        else:
            self.setGeometry(50, 50, 1000, 600)


if __name__ == "__main__":   
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
    app = MainStyleUI(sys.argv)
    myWin = TitleWindow(widget_2_sub=MyWindow(),icon_path='images/icon.png',title='WLA')
    myWin.show()
    sys.exit(app.exec_())
UI_Form zieht die nachstehenden Formulare nach, also Tabs genau genommen

Code: Alles auswählen

from PyQt5.QtWidgets import QMainWindow, QTabWidget, QVBoxLayout
from PyQt5.QtCore import QPropertyAnimation, QRect
from PyQt5.QtWidgets import QMainWindow, QTabWidget
from PyQt5.QtGui import QTransform, QIcon, QPixmap
from worklogapp.frm_editor_log import WindowEditLog
from worklogapp.frm_projekt_eintragen import WindowProjektEintragen
from worklogapp.frm_new_projekt_kst import WindowNewProjKST
from worklogapp.frm_web_to_workside import WindowWebBuchen
from worklogapp.frm_web_terminal import WindowWebTerminal
from worklogapp.frm_auswertung import WindowAusertung
from worklogapp.frm_detailarbeit_eintragen import WindowDetailarbeitEintragen
from worklogapp.styles import MainStyleUI
import locale
import sys
import worklogapp.settings as settings


class Ui_Form(object):
    def setupUi(self, Form):
        self.title = 'WLA'
        self.BOX_H_V = settings.getStrValue('BOX_H_V')
        self.iconcolor = settings.iconpre()


        # Initialize tab screen
        self.tabs = QTabWidget()
        self.tabs.setTabPosition(QTabWidget.West)
        self.animation = QPropertyAnimation(self, b"geometry")

        # Initialize tabwidgets
        self.tab_frm_projekt_eintragen = WindowProjektEintragen()
        self.tab_frm_projekt_eintragen.setFocus_frm_detailarbeiten = self.setFocus_frm_detailarbeiten
        self.tab_frm_new_projekt_kst = WindowNewProjKST()
        self.tab_frm_new_projekt_kst.setFocus_frm_projekte = self.setFocus_frm_projekte
        self.tab_frm_new_projekt_kst.setFocus_frm_detailarbeiten_proj_kst = self.setFocus_frm_detailarbeiten_proj_kst
        self.tab_frm_editor_log = WindowEditLog()
        self.tab_frm_web_to_workside = WindowWebBuchen()
        self.tab_frm_web_terminal = WindowWebTerminal()
        self.tab_frm_auswertung = WindowAusertung()
        self.tab_frm_detailarbeit_eintragen = WindowDetailarbeitEintragen()
        self.tab_frm_detailarbeit_eintragen.setFocus_frm_projekte = self.setFocus_frm_projekte

        self.initUI()

    def initUI(self):
        # Add tabs
        tablist = [[self.tab_frm_projekt_eintragen, self.iconcolor + "cil-home.png"],
                   [self.tab_frm_new_projekt_kst, self.iconcolor + "cil-plus.png"],
                   [self.tab_frm_editor_log, self.iconcolor + "cil-folder-open.png"],
                   [self.tab_frm_web_to_workside, self.iconcolor + "cil-browser.png"],
                   [self.tab_frm_web_terminal, self.iconcolor + "cil-touch-app.png"],
                   [self.tab_frm_auswertung, self.iconcolor + "cil-notes.png"],
                   [self.tab_frm_detailarbeit_eintragen, self.iconcolor + "cil-notes.png"]]
        for x in tablist:
            self.tabs.addTab(x[0], QIcon(QPixmap(settings.iconpath() + x[1]).transformed(QTransform().rotate(90))), '')
        # set "tab_frm_detailarbeit_eintragen" invisible
        self.tabs.setTabVisible(6, False)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tabs)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addStretch(-1)
        self.setLayout(self.layout)

__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der falsche Grundsatz beginnt in meinen Augen schon viel früher: man verändert schlicht nicht die Größe eines Fensters auf Knopfdruck. Das ist überraschend und nervig. Und je nach genutztem Windowmanager gar nicht möglich.

Ich würde das also schlicht nicht machen.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Zwei weitere Anmerkungen: In der Datei wo `Ui_Form` definiert wird hast Du einen Kommentar am Anfang entfernt wo drin stand das man die Datei nicht ändern sollte. Hast Du aber offensichtlich gemacht.

Das andere ist, das man die Datei eigentlich gar nicht erst generiert hätte. Man kann direkt die *.ui-Datei in einem Programm laden. Das `PyQt5.uic`-Modul hat die nötigen Werkzeuge dafür.

Edit: Kann es sein das da Pfadteile mit ``+`` zusammengesetzt werden? Das macht man nicht. Dafür gibt es das `pathlib`-Modul.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

ich dachte ich mache mal was anderes. Ist ja nur eine Anwendung für mich selbst und um Python kennen zu lernen.
Also anstatt ca. 6 neue Formulare zu verwenden, das ganze in Tabs und dann mit der Fenstergroesse zu arbeiten.

Im WindowProjektEintragen werden praktisch nur Butten dargestellt. Diese sind variabel, also aus einer Log Datei generiert. Deshalb auch die zwei Fenstergroessen.

Danke auch für den Tipp der Dateipfad. Werde ich anpassen.

Jetzt bin ich mir nicht mehr sicher, was ich machen soll. :lol:
Antworten