2017-03-28 1 views
6

Ich habe an einem Notizprogramm für mich gearbeitet und es läuft gut, aber ich hatte viele Probleme damit, alle meine Widgets mit den Optionen .pack() oder .grid() dorthin zu bringen, wo ich sie haben möchte.Warum sagen Leute "Dont use .place()"?

Nachdem ich mich umgesehen habe, fand ich, dass ich stattdessen die .place() Option verwenden konnte. Bevor ich mich entschloss, .place() zu verwenden, fand ich unzählige Forum Post sagen "nicht verwenden .place()!".

Ich war mit meinen anderen Optionen an einem Stand still, also entschied ich mich, .place() einen Versuch zu geben. Es stellt sich heraus, .place() ist genau das, was ich brauchte, um meine Layout-Probleme zu beheben, und ich verstehe einfach nicht, warum alle auf .place() so viel hassen.

Gibt es etwas inhärent falsch mit .place()? Oder bevorzugen die Leute einfach .pack() und .grid() aus einem anderen praktischen Grund als der Benutzerfreundlichkeit?

+0

Wer sagte "* nicht verwenden' .place() '! *"? Diese unzähligen Forum Lügen – abccd

+0

@abccd Ich sagte "Verwenden Sie nicht Platz()!" als Verallgemeinerung der Kommentare las ich über das Netz. Personen, die Fragen zu Rasterlayouts mit Pixeln oder mit .place() stellten, und ein Problem, das sie hatten, sollten stattdessen .grid() verwenden. Hinweis: Ich forsche viel außerhalb von Stackoverflow. viele der Fragen, die ich habe, neigen dazu, auf anderen Seiten zu sein, wenn Sie in der Google-Suche fragen. –

Antwort

4

Es gibt nichts wirklich falsch mit .place, obwohl mit grid und pack geben Sie mehr wartbaren Code. Wenn Sie eine Funktion hinzufügen möchten, müssen Sie beispielsweise die Anzahl der absoluten Platzierungen so ändern, dass sie zum Beispiel in eine Schaltfläche passen (place).

Wenn Sie es verwenden müssen, dann verwenden Sie es, es gibt kein echtes Problem damit, es ist einfach nicht die wartungsfreundlichste Lösung für viele Probleme. Wie Sie sagen, ist es eine Frage der Vorliebe und Benutzerfreundlichkeit.

Edit: es gibt eine ausgezeichnete Antwort können Sie darüber lesen here.

+0

Das macht Sinn. Aber um ehrlich zu sein, ich habe es wirklich schwer mit .grid versucht, alles dort zu bekommen, wo ich es will und .platz ist genauso schlimm, wenn nicht schlimmer als .grid. Wie gehen Sie mit den Größenänderungsproblemen um? spansspan oder rowspan hilft ein wenig, aber auf lange Sicht bekommen Sie einen Platz wo Sie es wollen und die Größe, die Sie wollen, wird ein großer Schmerz. –

+0

@BaconTech Was meinst du mit Größenänderungsproblemen? Sie können Ihre Leinwand an eine Größenänderungsfunktion binden, wenn sie dynamisch skaliert werden muss, oder wenn Sie meinen, wie Sie mit Leerraum umranden oder spielen können, dann gibt es [viele Optionen] (http://stackoverflow.com/a/14947657/ 6144626). Wenn Sie ein bestimmtes Problem mit der Größenanpassung haben, dann ist das am besten zu einer anderen Frage überlassen :) –

+0

@Air Cooper-Davis Ich werde auf den Link, den Sie zur Verfügung gestellt haben. Ich bin neu im Programmieren und es gibt viel für mich herauszufinden. Möglicherweise habe ich etwas aus der Rasteroption verpasst, das bei meinem Problem helfen könnte. –

4

Ich bin mir nicht sicher, welche Beweise Sie haben, sagt jeder sagt nicht zu verwenden place. Ich vermute, wenn du nach Stackoverflow-Posts urteilst, liest du meine Meinung meistens hundert Mal statt hundert verschiedener Meinungen.

Ich empfehle gegen place hauptsächlich, weil es mehr Arbeit erfordert, um eine Benutzeroberfläche zu erstellen, die auf Änderungen in Schriftarten, Auflösungen und Fenstergrößen reagiert. Während es möglich ist, eine GUI zu schreiben, die Platz verwendet und auf diese Dinge reagiert, erfordert es viel Arbeit, um richtig zu machen.

Ein Vorteil, dass beide pack und grid über place ist, dass sie tkinter erlauben richtig die Größe der Wurzel und Toplevel Fenster zu konfigurieren. Mit place müssen Sie eine Größe fest codieren. Tkinter ist bemerkenswert gut darin, dass Fenster genau die richtige Größe haben, ohne dass Sie sich für explizite Größen entscheiden müssen.

Darüber hinaus ist die langfristige Wartung von Anwendungen, die place verwenden, schwierig. Wenn Sie ein neues Widget hinzufügen möchten, müssen Sie fast jedes zweite Widget anpassen. Mit grid und pack ist es viel einfacher, Widgets hinzuzufügen und zu entfernen, ohne das Layout aller anderen Widgets ändern zu müssen. Wenn ich etwas über Jahre der Verwendung von tk und tkinter gelernt habe, ist, dass mein Widget-Layout während der Entwicklung ein Los ändert.

place ist vor allem für Randfälle nützlich. Wenn Sie beispielsweise ein einzelnes Widget in einem anderen Widget zentrieren möchten, ist place fantastisch. Wenn Sie ein Widget so platzieren möchten, dass es unabhängig von anderen Widgets ist, ist place auch dafür geeignet.

+0

die meisten meiner Forschung ist außerhalb des Stack-Überlaufs. Ich beginne mit der Google-Suche und arbeite mich durch die Liste. Ich neige dazu, stackoverflow zu verwenden, wenn ich nicht weiterkomme oder eine gut geschriebene Erklärung von etwas benötige. –

+0

Auch "place" ist wahrscheinlich die einfachste Möglichkeit, ein Widget gegenüber einem anderen anzuzeigen, wenn die Position des Kinds relativ zu seinem Elternteil ist. –

+0

@Rightleg: Ich würde nicht sagen, das ist immer wahr. Zum Beispiel, wenn ich ein einzelnes Widget wie ein Canvas- oder Text-Widget über einen Frame platziere und ich möchte, dass es den Frame füllt, kann "pack" genauso gut, wenn nicht besser als "place" sein. –

Verwandte Themen