[Tkinter/tkk] Separator mit .place() GeometryMgr

Fragen zu Tkinter.
Antworten
Benutzeravatar
graphicsH
User
Beiträge: 84
Registriert: Donnerstag 8. September 2011, 10:21

Hi,

ich arbeite gerade an einem Projekt mit etwas komplexerem GUI,und möchte daher einen Separator einbauen...

Geometrie-Manager: place
Module: ttk

Code: Alles auswählen

from Tkinter import *
import ttk
root = Tk()
s = tkk.Separator(root,orient=HORIZONTAL)
s.place(y=30)
root.mainloop()
Das Problem:
Der Separator ist nur einige mm lang!

Alle Beispiele im Internet vewrwenden den .grid Geometrie Manager,daher wollte ich fragen,ob der .place GM überhaupt einen Separator (korrekt) darstellen kann...
Wenn ja,wie ich die Länge einstellen kann... (habe bereits width/length/u.ä. ausprobiert...)
-
BlackJack

@graphicsH: Warum verwendest Du `place()`?
Benutzeravatar
graphicsH
User
Beiträge: 84
Registriert: Donnerstag 8. September 2011, 10:21

weil es zu komplex für pack,und zu genau (positionen,etc...) für grid ist...
-
deets

Glaube ich nicht. Pack & Grid sind immer besser als place. Man muss sich ein bisschen mehr Muehe geben, aber erhaelt dafuer adaptive layouts.

In HTML baut auch keiner mehr pixel-GIFs + Tabellenlayouts mit harten Koordinaten...
BlackJack

@graphicsH: Was für eine Ausnahme-GUI hast Du denn da? Das muss ja was ganz exotisches sein.
Benutzeravatar
graphicsH
User
Beiträge: 84
Registriert: Donnerstag 8. September 2011, 10:21

@BlackJack
das Problem ist,dass es sehr viele widgets enthält,aber möglichst klein bleiben soll. und mit place kann ich viel genauer (und daher platzsparender) positionieren.

@all
Könnte mir auch jemand meine Frage beantworten,anstatt meine Gründe zu hinterfragen?
-
deets

graphicsH hat geschrieben: @all
Könnte mir auch jemand meine Frage beantworten,anstatt meine Gründe zu hinterfragen?
Ach, bei jemandem der so offensichtlich besser weiss wie's geht - da wagt man ja gar nicht zu antworten, man macht sich wahrscheinlich eh nur zum Lappel...
Benutzeravatar
graphicsH
User
Beiträge: 84
Registriert: Donnerstag 8. September 2011, 10:21

fuck off

genau deßhalb hab ich das forum vor nem jahr verlassen,und werds auch jetzt wieder machen...
Anstatt hilfreiche Antworten wie in anderen Foren,bekommt man nur
Dumme Kommentare:
deets hat geschrieben:
graphicsH hat geschrieben: @all
Könnte mir auch jemand meine Frage beantworten,anstatt meine Gründe zu hinterfragen?
Ach, bei jemandem der so offensichtlich besser weiss wie's geht - da wagt man ja gar nicht zu antworten, man macht sich wahrscheinlich eh nur zum Lappel...
oder unnötige Gegenfragen:
BlackJack hat geschrieben:@graphicsH: Warum verwendest Du `place()`?
Und ein drittes mal werd' ich's mir nicht antun,in diesem Forum Hilfe zu suchen...



P.S.: wenn mögliche möge einer der admins meinen account löschen,ich finde den button zum account-löschen nicht unter den einstellungen. sollte mal jemand etwas übersichtlicher machn...
-
BlackJack

@graphicsH: Meine Gegenfrage war nicht unnötig. Das ich vorher erfahre *warum* jemand ein Problem hat, welches er vielleicht gar nicht haben müsste, ist für mich nötig um abzuschätzen ob es a) einen besseren Lösungsweg gibt, und dann b) zu entscheiden ob *ich* in den eingeschlagenen Lösungsweg Zeit investieren möchte. Und bei der Verwendung von `place()` beschäftige ich mich nur mit dem Problem wenn ich mir sicher bin, dass das kein künstliches Problem ist, welches man mit anderen Mitteln besser lösen könnte. Wovon Du mich bisher nicht überzeugen konntest.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Ist lange her dass ich meinen Account in einem Forum eigenhändig löschen konnte. Und Stolz ist bekanntermaßen eine der Todsünden. Warum also wegen einer solchen Kleinigkeit gleich in die Luft gehen, hat fast schon Troll-Charakter.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi graphicsH

Please don't f...ck us all! We still love you!
Nicht gleich den Pickel ins Korn werfen! Zurück zu deinem 'Separator' Problem. Ich brauchte für meine Anwendungen hauptsächlich den pack-Layouter und bin damit gut klar gekommen. Hier eine simple Code-Sequenz die den Separator einbindet. Dies unter ausschliesslicher Verwendung des pack-Layouters:

Code: Alles auswählen

import Tkinter as tk
import ttk

root = tk.Tk()
root.geometry('300x100')
root.title('Separator')

main_frame = tk.Frame(root)
main_frame.pack(fill='x', expand=True, padx=10, pady=10)

button = ttk.Button(main_frame, text='Starten')
button.pack(pady=5)

separator = ttk.Separator(main_frame,orient='horizontal')
separator.pack(fill='x', expand=True, pady=0, padx=0)

button = ttk.Button(main_frame, text='Beenden')
button.pack(pady=5)

root.mainloop()
Wenn du für deine Anwendung noch mehr Unterstützung benötigst müsstest du uns natürlich auch mehr Code präsentieren.

Gruß wuf :wink:
Take it easy Mates!
Benutzeravatar
graphicsH
User
Beiträge: 84
Registriert: Donnerstag 8. September 2011, 10:21

@wuf
erstmal danke für die erste 'brauchbare' antwort :)

Nur wie gesagt,aus Platzgründen verwende ich place.
In meinen Testversuchit pack und grid funktioniert der Separator auch,nur bei place nicht...

Da es aber anscheinend keine Lösung für das Problem gibrt (auch im restl. Internet) verwendeich einfach ein Frame mit minimaler Höhe,wodurch es auch als eparator hinhalten kann. Das Problem ist somit gelöst...
-
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Das funktioniert doch mit 'place':

Code: Alles auswählen

import Tkinter as tk
import ttk

root = tk.Tk()

sep = ttk.Separator(root,orient=tk.HORIZONTAL)
sep.place(y=30, width=100)

seph = ttk.Separator(root, orient=tk.HORIZONTAL)
lab = ttk.Label(text='Some Widget')
lab.place(relx=0.5, rely=0.4, anchor=tk.CENTER)
seph.place(in_=lab, rely=1, relwidth=1)

root.mainloop()
Siehe auch: http://effbot.org/tkinterbook/place.htm
Benutzeravatar
graphicsH
User
Beiträge: 84
Registriert: Donnerstag 8. September 2011, 10:21

yipyip hat geschrieben:Das funktioniert doch mit 'place':

Code: Alles auswählen

import Tkinter as tk
import ttk

root = tk.Tk()

sep = ttk.Separator(root,orient=tk.HORIZONTAL)
sep.place(y=30, width=100)

seph = ttk.Separator(root, orient=tk.HORIZONTAL)
lab = ttk.Label(text='Some Widget')
lab.place(relx=0.5, rely=0.4, anchor=tk.CENTER)
seph.place(in_=lab, rely=1, relwidth=1)

root.mainloop()
Siehe auch: http://effbot.org/tkinterbook/place.htm
Ich probiers mal,nur hab ich bei 'width' immer eine Fehlermeldung bekommen...
-
Antworten