GUI Installationsformular

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PythonProgrammer2.0
User
Beiträge: 13
Registriert: Montag 8. Juli 2019, 15:58

Hallo an alle,
ich habe heute mit Tkinter experimentiert, und habe schon das erste Problem.
Ich möchte zwei Buttons untereinander erstellen und daneben EIN Label über ZWEI Reihen mit einer Bilddatei.
Ähnlich, wie bei einem Installationsprogramm.
Folgendes habe Ich versucht:

Code: Alles auswählen

from tkinter import *
fenster = Tk()
B1 = Button(fenster, text='Option 1')
B2 = Button(fenster, text='Option2')
Photo = PhotoImage(file='Bild.gif', master=fenster)
Label = Label(fenster, image=Photo)
B1.pack(side='right')
B2.pack(side='right')
Label.pack(side='left')
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PythonProgrammer2.0: Man sollte innerhalb des selben Containerwidgets die Seiten von `pack()` nicht mischen. Das kann zu schwer vorhersehbaren Layouts führen. Wenn Du bei `pack()` bleiben möchtest, dann brauchst Du für die Schaltflächen einen `tkinter.Frame` wo die übereinander reingesteckt werden und dann kannst Du diesen `Frame` und das `Label` mit dem Bild nebeneinander `pack()`\en. Alternativ kannst Du Dir das `grid()`-Layout anschauen.

Weitere Anmerkungen: Sternchen-Importe sind Böse™. Du holst Dir da fast 200 Namen ins Modul von denen nur ein kleiner Bruchteil tatsächlich verwendet wird und welche die noch nicht einmal im `tkinter`-Modul definiert sind. Das `tkinter`-Modul wird üblicherweise mit ``import tkinter as tk`` importiert, und die Werte aus dem Modul über `tk` angesprochen, also beispielsweise `tk.Label`.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Du hast durch Deine Namensschreibweise im Grunde sogar einen Fehler gemacht, denn Du kannst, weil Du `Label` als Namen verwendet hast, nun keine weiteren `Label` mehr erstellen.

Namen sollten nicht durchnummeriert oder kryptisch abgekürzt werden.

Auf Modulebene sollte nur Code stehen, der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.

Für das `side`-Argument hat das `tkinter`-Modul Konstanten (`tk.LEFT`, `tk.TOP`, …).

Beim `PhotoImage` brauchst Du keinen `master` angeben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
PythonProgrammer2.0
User
Beiträge: 13
Registriert: Montag 8. Juli 2019, 15:58

__blackjack__ hat geschrieben: Montag 8. Juli 2019, 17:01Alternativ kannst Du Dir das `grid()`-Layout anschauen.
Danke. (Ich bin blutiger Anfänger.) Gibt es denn dort so etwas wie colspan? Ähnlich, wie bei einer HTML Tabelle nur eben in einer Reihe?
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Steht alles in der Dokumentation: http://www.effbot.org/tkinterbook/grid.htm
PythonProgrammer2.0
User
Beiträge: 13
Registriert: Montag 8. Juli 2019, 15:58

Danke. Das hat weitergeholfen - Wie gesagt: Ich bin Anfänger.
Antworten