jens hat geschrieben:Das sieht nicht sehr intuitiv aus
Ich erwarte da Punkte im Kontextmenü für.
Schon mal in einer Textverarbeitung eine Tabelle eingefügt und mit rum hantiert?!?
Ich weiß, dass ich das Grid Layout mit mehr Optionen versehen könnte, was ich etwa beim Place Layout getan hatte. Und die letzte Zeile für Einfügen uind Löschen ist Schmarrn. Da nimmt man besser vier Buttons.
Schaut doch sehr intuiiv aus. Wenn Du ein Widget hast und möchtest es auf grid Position row = 0, column = 0 setzen, dann trägst Du einfach 0 in row und 0 in column ein und drückst jeweils Enter. Und bei einer anderen Position machst Du es genauso. Wenn Du mehrere nebeneinander in einer Zeile hintereinander positionieren willst, dann kreuzt Du die Checkbox (darunter steht inc) hinter dem Entry Eintrag col an und brauchst danach nur immer den Button 'grid' zu drücken. Wenn Du dann in die nächste Zeile wechseln willst, dann drückst Du new row.
Und es ist selbstverständlich 100 % WYSIWYG, denn nachdem Du das gemacht hast, siehst Du das Widget genau da, wo es hingehört. Natürlich könnte man sich eine etwas bessere Bedienung, etwa auch mit Maus wünschen. Dazu kommen wir nachher.
Zu Textverarbeitung und Tabelle. Ich habe nur die tkinter Befehle grid() und grid(row = x, coumn = y) im Basis Grid Layout relisiert. Wahrscheinlich denkst Du, wenn Du von Tabelle sprichst auch an grid_columnconfigure und grid_rowconfigure. Muss man sich nur überlegen, wo und wie man das in der GUI einbaut.
Dann zur Bedienung mit der Maus. Im Place Layout habe ich Bedienung mit der Maus realisiert. Sollte man im Grid Layout wohl auch tun, aber die Fehler wie beim Place Layout vermeiden und sie im Place Layout beseitigen.
Beim Place Layout hatte ich die Bedienung mit der Maus jeweils nur für einzelne Widgets ein oder ausgeschaltet und dann mit geänderten Cursor 'mouse' mir von den Widgets anzeigen lassen, ob sie mit der Maus selektiert und bewegt werden können. Das hat mich aber öfter genervt. Wenn man nachher die GUI gespeichert hatte und vergessen hatte die Mausbedienung wieder auszuschalten, dann wurden die Widgets mit cursor='mouse' gespeichert.
Mein Vorschlag ist:
- den Maus Cursor normal lassen
- auch weiterhin nicht automatisch die Mausbedienung einschalten. Denn Widgets könnten ja bereits mit Maus Events versehen sein, die man nicht automatisch beseitigen möchte.
- Auf Buttondruck alle Widgets in dem betreffenden Container mit dem betreffenden Layout mit Mausbedienung zu versehen.
- Statt zwei Buttons nur einen einzigen Switch Button zu nehmen. An dessen Text und Farbe sieht man dann, ob die Mausbedienung ein oder aus ist.
- Auf Buttondruck dann die Mausbedienung auch wieder für alle Widget ausschalten.
- Im Grid Layout vorerst die Widget Selektion mit der Maus implementieren. Dann ist auch Zeilen oder Spalten einfügen oder löschen einfach. Jetzt muss man entweder die entsprechende Zeile oder Spalte händisch eingeben oder in der Selektion nach einem Widget mit betreffenden Namen suchen, das die passenden row column Koordinaten hat. Einfach auf ein Widget in der betreffenden Zeile oder Spalte klicken und danach Zeile oder Spalte einfügen oder löschen drücken, ist wohl am Einfachsten.
- Überlegen, wie man einzelne Widgets mit der Maus in eine andere Zeile oder Spalte verschiebt. Wie wäre es bei soundsoviel Pixel X.Y Abweichung der Maus relativ zum Beginn, aber nur um eine Spalte oder Zeile?
Und Kontext Menü kommt später, muss mich noch mit PanedWindow und Menü auseinandersetzen.
Und per Container für Grid eine Column Configure Tabelle und eine Row Configure Tabelle, wäre doch etwas aufwändig. Würde ich mir gerne bei der ersten GUI Designer Version ersparen. Setz doch einfach Widgets rein, die genug hoch oder breit sind. Etwas für Spalten in die erste Zeile Frames mit entsprechender Breite aber Höhe 0. Und bei den Zeilen machst Du es auch so.