GUI Projekt - Diverse Hürden (Grid, Style)

Fragen zu Tkinter.
Antworten
Geekpirat
User
Beiträge: 4
Registriert: Dienstag 4. Januar 2011, 22:56

Hallo Forum,

Ich versuche mich an einer GUI für ein kleines Tool das ich geschrieben habe.

So in etwa soll mein Interface am Ende aussehen:
http://dl.dropbox.com/u/17343176/MockUp.jpg

Hier meine Problemchen mit Bildern zur Veranschaulichung:

# Grid
[*] Ich bekomme den Button nicht "neben" den Ladebalken. Er ist immer leicht nach oben versetzt.

[Bild] Falsche Farben & Verschobener Button:
http://dl.dropbox.com/u/17343176/Bildschirmfoto-1.png

[*] Wie kann ich leere Zellen als Abstandshalter nutzen?

[Bild] So stell ich mir das Grid vor - z.B.: Spalte 3 soll eigentlich als "Abstandshalter dienen":
http://dl.dropbox.com/u/17343176/MockUpTable.jpg

#Style
[*] Wenn ich das "Theme" definiere bevor mein root-Fenster erzeugt wird, stimmt zwar überall das Theme, aber der Ladebalken wird
in einem separaten Fenster angezeigt. Ich verstehe nicht warum.
[*] Erzeuge ich erst das root-Fenster und definiere dann das "Theme", ist der Ladebalken genau da wo er sein soll. Die Farben stimmen dann aber nicht.

[Bild] Abgetrennter Ladebalken:
http://dl.dropbox.com/u/17343176/Bildschirmfoto.png

Code:

Code: Alles auswählen

#!/usr/bin/env python3

from tkinter import *
from tkinter import ttk, filedialog, messagebox

start = 0
ende = 0
prg = 100

def calc():
	pass


# root Window
root = Tk()
root.geometry("400x170")
root.resizable(FALSE,FALSE)
root.title("NumListGenGUI V0.1 by Geekpirat")

# Style
style = ttk.Style()
style.theme_use("clam")

# Frame
content = ttk.Frame(root, padding = "8 8 8 8")
content.grid(column = 0, row = 0, sticky = (N, W, E, S))
#content.columnconfigure(0, weight = 1)
#content.rowconfigure(0, weight = 1)


# Content // Buttons, Labels ...
ttk.Label(content, text = "Start").grid(column = 1, row = 1, sticky = (SW))
ttk.Label(content, text = "Ende").grid(column = 4, row = 1, sticky = (SW))
ttk.Label(content, text = "Output").grid(column = 1, row = 4, sticky = (SW))
ttk.Label(content, text = "Fortschritt").grid(column = 1, row = 7, sticky = (SW))

start_entry = ttk.Entry(content, width = 10, textvariable = start)
end_entry = ttk.Entry(content, width = 10, textvariable = ende)
start_entry.grid(column = 1, row = 2, sticky = (W))
end_entry.grid(column = 4, row = 2, sticky = (W))

#save_file = filedialog.asksaveasfilename()
#save_file.grid(column = 1, row = 5, sticky = (W))
#messagebox.showinfo(message = " Done! Happy Hacking! :) ")
s = ttk.Separator(content, orient = HORIZONTAL)
s.grid(columnspan = 8 , row = 6, sticky = (W, E))

prg_bar = ttk.Progressbar(mode = "determinate", value = 50, variable = prg, length = 200)
prg_bar.grid(columnspan = 2, row = 8, sticky = (W))

calc_Button = ttk.Button(content, text = "Generate", command = calc)
calc_Button.grid(column = 8, row = 8, sticky = (S))

# Padding 4 all
for child in content.winfo_children():
	child.grid_configure(padx = 1, pady = 1)

# Focus, Enter-Key, MainLoop
start_entry.focus()
root.bind('<Return>', calc)
root.mainloop()
Das Programm kann derzeit noch garnichts. Ich möchte erstmal das Layout hinbekommen und mich dann der Funktionalität widmen.
Wisst ihr da weiter?

Grüße
Geekpirat
BlackJack

@Geekpirat: Du willst nicht das die Schaltfläche neben und über dem Ladebalken ist, zeichnest ihn in dem Grid-Mockup aber eine Zeile über dem Ladebalken ein‽ Das widerspricht sich.

Sternchenimporte sollte man vermeiden.

Du gibst Deinem `Progressbar` kein Elternwidget mit. Dann ist nicht wirklich garantiert wo das dargestellt wird.
Geekpirat
User
Beiträge: 4
Registriert: Dienstag 4. Januar 2011, 22:56

@ BlackJack

Das GridMockUp hab ich auf die schnelle für euch gezeichnet. Dabei ist mir da ein Fehler unterlaufen. Passiert.

Das mit den Sternchenimporten hab ich schonmal hier gelesen. Ich muss mal nachschauen was daran so schlimm ist. Damit spar ich mir immerhin ne Menge schreibarbeit.

Danke für den Hinweis mit dem Parent. Ich hätte Tage gebraucht das zu entdecken. Danke!

Was ist mit den anderen Fragen? Z.B.: Ob sich leere Zellen als Platzhalter (Spacer) überhaupt missbrauchen lassen. Habe manchmal das Gefühl, leere Zellen "schrumpfen" in sich zusammen.

Gruß
GP
deets

Was an Sternchenimporten schlimm ist?

Code: Alles auswählen

from foo import *
from bar import *

PillePalle()
Und jetzt verrate mir doch mal, aus welchem Import PillePalle stammt.
Geekpirat
User
Beiträge: 4
Registriert: Dienstag 4. Januar 2011, 22:56

Ich bin geneigt zu sagen: "Who Cares - solange es funktioniert." ;)

Aber ich verstehe genau worauf du hinaus willst.
Ist quasi wie Code ohne Kommentare.

Gruß GP
BlackJack

@Geekpirat: Es funktioniert halt auch nicht immer. Irgendwann kommt der Punkt wo die Leute mal einen Debugger anwerfen und ihre Namen dann auf Modulebene in hunderten von importierten Namen heraus finden müssen. Und über Namensgleichheiten kann man auch stolpern. Der Name könnte ja auch in *beiden* Modulen enthalten sein. Beliebte Falle sind `PIL.Image` und `Tkinter.Image`. Und man hat echt nicht so viel mehr Tipparbeit wenn man zum Beispiel das `Tkinter`-Modul an den Namen `tk` bindet.
deets

Geekpirat hat geschrieben:Ich bin geneigt zu sagen: "Who Cares - solange es funktioniert." ;)
Ich bin geneigt zu sagen "famous last words". "Funktionieren" tun auch globale Variablen, GOTO, selbstmodifizierender Code, magische Konstanten, multi-threading ohne Synchronisation usw. usf.
Antworten