Seite 1 von 1

Anfänger-Fragen zu Python tkinter

Verfasst: Samstag 2. Mai 2020, 12:01
von kwon
Hallo,

ich habe schon Programmiererfahrung - habe aber vor Kurzem erst mit Python begonnen.

Außerdem bin ich neu hier...

Ich möchte eine GUI für einen SudokuSolver erstellen.

Wie kann ich es hinbekommen, dass die Textboxen auf dem GUI quadratisch sind?
Habe in einem Buch nur gesehen, dass man "width" angibt (und dass die Größe des widgets vom Inhalt abhängig ist).

Ich hätte gerne für Überschrift und Buttons ein Leerraum-Rahmen rundherum um die widgets - wie macht man das?

Ich müsste die Textboxen über row=i column=j ansprechen können - bekomme aber e nicht hin per Code eine bestimmte Textbox

mit einem Wert zu füllen - was mache ich falsch?

Ich weiß, dass ich viele Fragen habe, hoffe aber niemand damit zu verärgern und würde mich über Hinweise/Lösungen sehr freuen, da ich

, wie gesagt, ein Python-Anfänger bin...

Vielen Dank für die Hilfe im Voraus!!

kwon

Code: Alles auswählen

import tkinter
main=tkinter.Tk()

def tb(main,txt, wd):
    for i in range(0,9):
        for j in range(0,9):
            tb = tkinter.Entry(main, text=txt, width=wd).grid(row=i,column=j)

tb[0,0](main,"2",2)
main.mainloop()

Re: Anfänger-Fragen zu Python tkinter

Verfasst: Samstag 2. Mai 2020, 14:21
von __blackjack__
@kwon: Auch wenn Du schon Erfahrung in einer anderen Programmiersprache hast, funktioniert „programmieren durch raten“ nicht. Arbeite mal das Grundlagentutorial in der Python-Dokumentation durch, inklusive objektorientierte Programmierung. Denn die braucht man für jede nicht-triviale GUI.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Womit es ungünstig ist das `Tk`-Exemplar so zu nennen. Das heisst per Konvention `root`. Kann man aber auch `window` oder `main_window` nennen.

Namen sollten keine kryptischen Abkürzungen enthalten. Ich wüsste nicht man Ansatzweise was `tb` ausgeschrieben bedeuten mag. Wenn man `text` meint, sollte man nicht `txt` schreiben und wenn man `width` meint, sollte man nicht `wd` schreiben.

Was soll denn bei einem Ausdruck ``f[0, 0]`` heraus kommen wenn `f` eine Funktion ist? Was hast Du da erwartet was passiert?

Der Default-Startwert von `range()` ist 0, den kann man also weglassen.

Das lokale `tb` in der `tb()`-Funktion ist a) verwirrend und b) sinnlos weil `grid()` immer `None` als Rückgabewert liefert.

Überarbeitet:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk


def create_entry_grid(master, text, width):
    for i in range(9):
        for j in range(9):
            tk.Entry(master, text=text, width=width).grid(row=i, column=j)


def main():
    window = tk.Tk()
    create_entry_grid(window, "2", 2)
    window.mainloop()


if __name__ == "__main__":
    main()
Wobei ich die Eingabeelement wahrscheinlich noch in einen eigenen `Frame` stecken würde, damit man sich bei dem dann wieder zwischen `pack()` und `grid()` entscheiden kann.

Für Leerraum um Elemente gibt es die `pad*`-Optionen bei `pack()` `grid()`, `grid_columnconfigure()`, und `grid_rowconfigure()`.

Wenn Du auf Eingabeelemente zugreifen möchtest, dann musst Du Dir die Elemente in einer geeigneten Datenstruktur merken. Zum Beispiel in einer verschachtelten Liste oder einem Wörterbuch das ein Tupel mit den Koordinaten auf das Eingabeelement abbildet.

Re: Anfänger-Fragen zu Python tkinter

Verfasst: Samstag 2. Mai 2020, 14:47
von kwon
Hallo _blackjack_,
danke für deine ausführliche Antwort!
Du hast recht, ich werde mich zunächst einmal zum Grundlagen-Tutorial begeben...
Irgendwann später werde ich dann mit dem Thema nochmal wiederkommen (wenn nötig...).
Dankeschön,
viele Grüße,
kwon