Button aus einer Liste erstellen

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

ich möchte den Aufbau von 7 Button's (Objekte) in einer For Schleife machen und sie weiter zu verwenden.
Stehe gerade auf dem Schlauch mit dem erstellen der Button als Objekt und den entsprechenden Namen vom Objekt. Evtl. ist mein Ansatz grundlegend falsch.

Wie macht man sowas sauber?
Ein Objekt erstellen, dann das Objekt in die Liste nehmen um dann in der For Schleifte zu verwenden, ist sicherlich ein Unding.
Im Butten soll dann nur das Icon ersichtlich sein, also kein Text.

Code: Alles auswählen

        self.bt_open_logfile = BarButton('')
        self.bt_open_usersettings_file = BarButton('')
        self.bt_open_defaultsetting_file = BarButton('')
        self.bt_save_file_action = BarButton('')
        self.bt_print_action = BarButton('')
        self.bt_undo_action = BarButton('')
        self.bt_redo_action = BarButton('')

        defaut_bar_button = [[self.bt_open_logfile, 'cil-notes.png','Datenmanager Datei öffnen', ''],
                                  [self.bt_open_usersettings_file, 'cil-user.png', 'Lokale Einstellungen öffnen', ''],
                                  [self.bt_open_defaultsetting_file, 'cil-people.png', 'Allgemeine Einstellungen öffnen', ''],
                                  [self.bt_save_file_action, 'cil-save.png', 'Speichern', 'Ctrl+s'],
                                  [self.bt_print_action, 'cil-print.png', 'Drucken', 'Ctrl+p'],
                                  [self.bt_undo_action, 'cil-action-undo.png', 'Zurück', 'Ctrl+z'],
                                  [self.bt_redo_action, 'cil-action-redo.png', 'Vor', 'Ctrl+Shift+z']
                                  ]
        for item in defaut_bar_button:
            item[0].setIcon(QIcon(path.join('images', item[1])))
            item[0].setToolTip(item[2])
            item[0].setShortcut(item[3])
            V_barButton.addWidget(item[0])

        self.bt_open_logfile.clicked.connect(lambda checked: self.open_file('log.txt'))
        self.bt_open_usersettings_file.clicked.connect(lambda checked: self.open_file('user_settings.ini'))
        self.bt_open_defaultsetting_file.clicked.connect(lambda checked: self.open_file('default_settings.ini'))
        self.bt_save_file_action.clicked.connect(self.file_save)
        self.bt_print_action.clicked.connect(self.file_print)
        self.bt_undo_action.clicked.connect(self.editor.undo)
        self.bt_redo_action.clicked.connect(self.editor.redo)
BarButton:

Code: Alles auswählen

class BarButton(QPushButton):
    def __init__(self, *args, **kwargs):
        super(BarButton, self).__init__(*args, **kwargs)
        QPushButton.__init__(self, *args, **kwargs)
        self.setObjectName('BarButton')
        self.setIconSize(QtCore.QSize(18, 18))
        self.setMaximumSize(35, 35)
        self.setContentsMargins(0, 0, 0, 0)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt schon alle Information in der defaut_bar_button-Liste hinterlegen. Dann kannst Du die Buttons auch komplett in der Schleife erzeugen:

Code: Alles auswählen

        bar_buttons_configuration = [
            ('cil-notes.png','Datenmanager Datei öffnen', '', lambda checked: self.open_file('log.txt')),
            ('cil-user.png', 'Lokale Einstellungen öffnen', '', lambda checked: self.open_file('user_settings.ini')),
            ('cil-people.png', 'Allgemeine Einstellungen öffnen', '', lambda checked: self.open_file('default_settings.ini')),
            ('cil-save.png', 'Speichern', 'Ctrl+s', self.file_save),
            ('cil-print.png', 'Drucken', 'Ctrl+p', self.file_print),
            ('cil-action-undo.png', 'Zurück', 'Ctrl+z', self.editor.undo),
            ('cil-action-redo.png', 'Vor', 'Ctrl+Shift+z', self.editor.redo),
        ]
        for icon, tooltip, shortcut, callback in bar_buttons_configuration:
            button = BarButton('')
            button.setIcon(QIcon(os.path.join('images', icon)))
            button.setToolTip(tooltip)
            button.setShortcut(shortcut)
            button.clicked.connect(callback)
            V_barButton.addWidget(button)
Ich denke, `path` ist os.path, da fehlt dann aber ein Verweis auf einen absoluten Pfad. V_barButton sollt einen besseren Namen bekommen, der sich auch an die Konventionen hält, also verticalbar_buttons, wobei wohl die Ausrichtung nicht das eigentlich interessante an den Knöpfen ist.
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

@Sirius3 Vielen Dank für deine Hilfe und die Tipps :-)
Antworten