Spezielle Ausrichtung in Menu-Wigdet

Fragen zu Tkinter.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Klappt man bei modernen Anwendungen ein Menü auf, dann werden - sofern vorhanden - auch die zugehörigen Shortcuts mit ausgewiesen.

Dabei sind die Menüeinträge linksbündig, die Shortcuts entweder rechtsbündig oder optisch wie mit einem Tabulator in vertikal gleicher linksbündiger Ausrichtung nach rechts verschoben.

So möchte ich das auch haben, klappt aber nicht, zumindest dann nicht, wenn ich eine proportionale Schrift verwende und das würde ich schon ganz gerne.

Die Beschriftung eines Menüeintrags, der über die add_command()-Methode hinzugefügt wird, erfolgt über die label-Option; hier muss eine Zeichenkette angegeben werden. Irgendwelche Möglichkeiten zur Ausrichtung habe ich nirgends gefunden.

Ich habe es mit Formatanweisungen für Zeichenketten probiert, aber das hilft nicht bei proportionalen Schriften. Ich habe es mit einem Tabulator versucht, aber die Escape-Sequenz wird nicht umgesetzt, sondern "\t" wird mit angezeigt.

Wäre schön, wenn jemand eine funktionierende Idee hätte.
lunar

Tja, ein gutes Toolkit macht das automatisch ...
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ja, ja, ich weiß, dass "Tkinter" nicht das Gelbe vom Ei ist, aus verschiedenen Gründen ist es für mich aber trotzdem die beste Wahl und vielleicht gibt es ja doch irgendeine Möglichkeit, das gewünschte Ergebnis auch mit Tkinter zu erreichen.

Ansonsten werde ich mich eben mit einer optisch wenig(er) ansprechenden Lösung zufrieden geben müssen :cry:
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Die ausbleibenden Reaktionen deute ich mal als "Es gibt keine wirkliche Lösung."

Falls es noch jemanden außer mir gibt, den das interessiert:

Ich habe eine - ausgesprochen unelegante - Lösung gebastelt, mit der ich es bis auf eine horizontale Ausrichtungsabweichung von max. 2 bzw. 3 Pixeln hinbekommen, indem ich den als Menüeintrag anzuzeigenden Text (links die Bezeichnung des Menüeintrags, rechts und rechtsbündig der Shortcut) in den nichtsichtbaren Bereich eines Canvas schreibe, dort die Breite in px ermittle und anschließend die daraus sich errechenbare Anzahl von Leerzeichen zwischen Menübezeichnung und Shortcut einfüge. Bei einer Breite von 4px für ein Leerzeichen (in dem von mir verwendeten Font) ergibt sich die o.g. max. horizontale Abweichung.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo pütone

Ich finde du musst deine Lösung hier unbending präsentieren, sofern sie nicht geheim ist. Bei Tkinter gibt es einige Sachen die überarbeite werden müssen. Es ist aber nicht immer leicht bestimmtes Verhalten, welches auf Tcl-Ebene codiert ist um zu biegen. Tkinter selber ist aber eine ideale Plattform für Forscher, Erfinder und Entwickler. Mit Tkinter eigen Widgets und ihren Methoden lässt sich da viel machen fast wie mit einem Lego- bzw. Metallbaukasten. Es braucht einfach ein wenig Zeit und Geduld und wichtig man darf dabei auf keinen Fall ausrasten Hi. So kann sich einer immer wieder auf die Schulter kloppfen, wenn er es geschafft hat mit den verügbaren Bauklötze etwas neues zusammen zu bauen. Klar gib es viele GUI's die einem fast alles fix und fertig zur Verfügung stellen. Da muss jeder selber entscheiden zu was er sich hingezogen fühlt. Für Leute mit einer kreativen Ader ist es sicher eine interessante Herausforderung eigene Widgets zu konstruieren. An Hand vom erzeugen Code wird einem erst klar was eigendlich hinter einem Widget-Komponenten steckt der im Normalfall einfach mit Drag and Drop auf die Projektfäche platziert wird.

Ich habe dein Post gelesen wollte dich aber machen lassen. Was mir beim Tkinter Menu nicht gefällt ist, dass es nicht die Möglichkeit gibt ein Icon mit Text als Submenu-Item zu kreieren. Das gleiche ist ja beim Label-Widget auch der Fall. Es gibt zwar Radiobuttons und Checkbuttons aber das wichtigste wie ein Canvas wurde hier leider nicht berücksichtigt. Eventuell ist dies irgendwie doch möglich aber wie es beim forschen der Fall ist können bestimmet Lösungswege übersehen werden.

Ich habe mich entschieden mein eigenes Menu-Widget aus reinen Tk-Widgets zusammen zu bauen, welches etwa dem heutigen Standard entspricht. Es ist aber noch in Bearbeitung.

So pütone es würde mich freuen, wenn du deine Erfindung zeigen könntest, solage du keine Lizenzgebühren dafür verlangst Hi.

Gruss wuf :wink:
Take it easy Mates!
lunar

Es überrascht mich immer wieder, wie man selbst die schlechtesten Bibliotheken schön reden kann ...
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

wuf hat geschrieben:So pütone es würde mich freuen, wenn du deine Erfindung zeigen könntest, solage du keine Lizenzgebühren dafür verlangst
Meine "Lösung" ist so unelegant, dass ich eher noch Geld drauflegen müsste, um es jemandem schmackhaft zu machen ... :)

Nee, ist kein Problem, ich mach mal ein Stück Code dazu fertig. Aus dem Programm, für das ich es nutze, lässt sich aber schlecht ein Stück herausschneiden, darum geht es nicht sofort. Vielleicht aber noch im Laufe des Tages.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

lunar hat geschrieben:Es überrascht mich immer wieder, wie man selbst die schlechtesten Bibliotheken schön reden kann ...
Du bist ja echt kein Freund von Tkinter ... :?
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo lunar

So schlecht ist die Tkinter Bibliothek gar nicht. Die Tkinter-Sektion in diesem Forum hat bis jetzt immerhin noch die meisten Post's gegenüber anderen. Ok wxPython ist am aufholen. Wir werden aber versuchen das Rennen noch ein wenig anzuführen Hi.

Ja es ist ein bisschen wie bei der Telefonie. Gewisse Leute ziehen es vor über Leitungen über dem Boden mit Nebengeräuschen im Ohr zu telefonieren als über Handys, welche ganze Wohngebiete mit Mikrowellen-Felder verseuchen, Kopfweh durch ihre unzähligen Verstärkertantennen verursachen und deren Funktionieren von einem enormen Aufwand an Netzwerk-Technologie abhängig ist die der Benutzer teuer bezahlt.
Sorry is just a joke Hi.

Gruss wuf :wink:
Take it easy Mates!
lunar

Die Tkinter-Sektion in diesem Forum hat bis jetzt immerhin noch die meisten Post's gegenüber anderen.
Hast du eigentlich schon mal über den Zusammenhang der Anzahl der Probleme innerhalb einer Bibliothek und der Anzahl der Postings zu dieser Bibliothek nachgedacht?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

lunar hat geschrieben:
Die Tkinter-Sektion in diesem Forum hat bis jetzt immerhin noch die meisten Post's gegenüber anderen.
Hast du eigentlich schon mal über den Zusammenhang der Anzahl der Probleme innerhalb einer Bibliothek und der Anzahl der Postings zu dieser Bibliothek nachgedacht?
Ich denke, hier gibt es überhaupt keine Art von eindeutigem Kausalzusammenhang. Es kann an der Komplexität eines Gegenstandes liegen, an einer speziellen Zusammensetzung der Nutzer (Tkinter ist z.B. DAS GUI-Toolkit, was an Schulen eingesetzt wird und wir alle kennen Postings von Schülern, die grauenhaft sind (nicht die Schüler)) usw. usw.

Dann müsste man z.B. auch die zeitliche Entwicklung betrachten, bspweise Threads pro Jahr o.ä. um eine Entwicklung zu erkennen.

Ich - als Tkinter-Nutzer - habe schon den Eindruck, als sei Tkinter unter den anderen gebräuchlichen GUIs das für den "professionellen Einsatz" (was auch immer das GENAU dann heißen mag) am wenigsten bzw. eigentlich überhaupt nicht geeignete Toolkit. Dafür ist es in der Regel immer dabei und wirklich einfach zu lernen. Als Einsteiger-Toolkit oder für den Bereich des schulischen Informatikunterricht darum ganz sicher eine gute Wahl.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo lunar
lunar hat geschrieben: Hast du eigentlich schon mal über den Zusammenhang der Anzahl der Probleme innerhalb einer Bibliothek und der Anzahl der Postings zu dieser Bibliothek nachgedacht?
Bis jetzt musste ich mich eigendlich nicht mit Problemen in der Tkinter-Bibliothek herumschlagen. Sie arbeitete bis anhin sehr stabil. Die Anwendung der verschiedenen Widgets, ohne brauchbare IDE, mit ihren vielen Optionen machte am Anfang vielleicht ein wenig Probleme. Auch der gemischte Einsatz der drei unterschiedlichen Layoutmanagern. Aber, wenn jemand ein wenig Linuxlastig ist gewöhn sich mit der Zeit daran mit Optionen herumzuspielen. Sicher darfst du den Funktionsumfang der Bibliothek nicht mit neueren vergleichen. Aber die Bibliothek lässt sich erweitern ohne C oder C++ zu beherschen. Was den professionellen Einsatz anbelangt, kann man sich darüber streiten. Ich glaube, wenn ein Anwender sein Problem mit der eingesetzten Software lösen kann spielt der Name des GUI-Toolkits eine nebensächliche Rolle ausser der Anwender ist ein absoluter Grafik-Krack. Was mich erstaunt das Tkinter in Schulen so verbreitet ist.

@pütone: Von mir aus kannst du deinen Code ohne weiter Konsmetik präsentieren. Ich mache keine Noten Hi.

OK lunar Gruss wuf :wink:
Take it easy Mates!
lunar

wuf hat geschrieben:Aber die Bibliothek lässt sich erweitern ohne C oder C++ zu beherschen.
Ich finde, dass ist nicht unbedingt ein Vorteil, wenn man selbst so gebräuchliche Widgets wie TreeViews im Toolkit vermissen muss ... sicher, man kann sowas selbst schreiben. Man kann aber auch einfach ein besseres Toolkit nehmen, und damit in einem Bruchteil der Zeit zum Ziel kommen.
Was den professionellen Einsatz anbelangt, kann man sich darüber streiten. Ich glaube, wenn ein Anwender sein Problem mit der eingesetzten Software lösen kann spielt der Name des GUI-Toolkits eine nebensächliche Rolle ausser der Anwender ist ein absoluter Grafik-Krack.
Es gibt nicht um den Anwender, es geht um den Programmierer.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo lunar
lunar hat geschrieben:Es gibt nicht um den Anwender, es geht um den Programmierer.
Ich glaube hier hast du mich missverstanden. Ich meinte, wenn ein Anwender (ein Kunde von mir) mit der von mir geschriebenen Software (mit Tkinter-GUI) sein Problem lösen kann ist ihm sicher egal welche Bibliothek hierfür verwendet habe.
lunar hat geschrieben: Ich finde, dass ist nicht unbedingt ein Vorteil, wenn man selbst so gebräuchliche Widgets wie TreeViews im Toolkit vermissen muss ... sicher, man kann sowas selbst schreiben. Man kann aber auch einfach ein besseres Toolkit nehmen, und damit in einem Bruchteil der Zeit zum Ziel kommen.
Ich habe auch schon mit Widgets eines anderen Tool-Kits gearbeitet. Deren Bezeichnung über die Jahren von VBX auf OCX dann auf ActiveX und die heutige Bezeichnung interessiert mich nicht mehr da ich diesen Tool-Kit fallen gelassen habe. Der Grund hierfür waren die nicht aufhörenden Updates mit all ihren unschönen Nebeneffekten. Was auch einen hohen Beitrag an unproduktiver Zeitverschwendung und finanziellen Investitionen abverlangte.

N.B. Übrigens ein gutes Tree-Widget existiert bereits. Es wurde auch schon in diesem Forum davon Gebrauch gemacht. Durch kleine Anpassungen kann es noch verbessert werden.
lunar hat geschrieben: Hast du eigentlich schon mal über den Zusammenhang der Anzahl der Probleme innerhalb einer Bibliothek und der Anzahl der Postings zu dieser Bibliothek nachgedacht?
OK. Welches von den neuzeitigen Tool-Kits würdest du mir vorschlagen einzusetzen? Ich muss annehmen, dass die wxPython Bibliothek die zweite ist die Probleme macht gemessen an Hand der Anzahl Postings in diesem Forum.

Gruss wuf :wink:
Take it easy Mates!
lunar

wuf hat geschrieben:
lunar hat geschrieben:Es gibt nicht um den Anwender, es geht um den Programmierer.
Ich glaube hier hast du mich missverstanden. Ich meinte, wenn ein Anwender (ein Kunde von mir) mit der von mir geschriebenen Software (mit Tkinter-GUI) sein Problem lösen kann ist ihm sicher egal welche Bibliothek hierfür verwendet habe.
Dem Kunden ist die darunter liegende Technik _immer_ egal, weil er für die Lösung zahlt und nicht für den Lösungsweg!

Und diese Lösung erbringt man schneller und qualitativ besser, wenn man auf den "Teilergebnissen" anderer aufbaut. Tkinter bietet da nicht viel, andere Toolkits sind viel umfangreicher und erlauben schnellere Entwicklung mit weniger Code.
Ich habe auch schon mit Widgets eines anderen Tool-Kits gearbeitet. Deren Bezeichnung über die Jahren von VBX auf OCX dann auf ActiveX und die heutige Bezeichnung interessiert mich nicht mehr da ich diesen Tool-Kit fallen gelassen habe.
ActiveX ist kein GUI-Toolkit, ActiveX ist ein Komponentenmodell. Mit GUI-Programmierung hat das erstmal ziemlich wenig zu tun.

Mit der VCL, mit Swing und WinForms dagegen konnte man schon vor fünf Jahren besser programmieren als mit Tk und die litten auch nicht an irgendwelchen tatsächlichen oder eingebildeten Update-Problemen.
OK. Welches von den neuzeitigen Tool-Kits würdest du mir vorschlagen einzusetzen? Ich muss annehmen, dass die wxPython Bibliothek die zweite ist die Probleme macht gemessen an Hand der Anzahl Postings in diesem Forum.
Ich nutze PyQt4 und kann das nur empfehlen. Ob du das nutzt, ist mir egal. Eigentlich ist mir auch egal, ob du Tk nutzt, ich muss damit ja nicht arbeiten. :K:
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo lunar
Ob du das nutzt, ist mir egal. Eigentlich ist mir auch egal, ob du Tk nutzt, ich muss damit ja nicht arbeiten. :K:
Da stimme ich dir 100% zu.

Danke für deine Antworten und Anregungen wünsche dir alles Gute Gruss wuf :wink:
Take it easy Mates!
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Hallo,

der lunar kann es immer noch nicht lassen über Tkinter herzuziehen. :wink:
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

wuf hat geschrieben:@pütone: Von mir aus kannst du deinen Code ohne weiter Konsmetik präsentieren. Ich mache keine Noten
Nee, das wäre nix gewesen. Da hängen verschiedene selbstgestrickte Module drin, insgesamt ca. 2500 Zeilen Quelltext mit viel zu viel Overhead für diese Sache.

Ich habe den Code jetzt fertig gemacht: http://paste.pocoo.org/show/78442/

Ich bin noch nicht richtig zufrieden mit dem internen Design, aber will jetzt auch nicht noch mehr Zeit hineinstecken.
Das kannst du dann ja machen bei der Arbeit am angekündigten neuen Menu-Widget ... :)
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo pütone
wuf hat geschrieben:@pütone: Von mir aus kannst du deinen Code ohne weiter Konsmetik präsentieren. Ich mache keine Noten
Sorry da haben sich ein paar wüste Schreibfehler eingeschlichen Hi.

Vielen Dank, dass du dir Zeit genommen hast deine Code hier zu präsentieren. Habe ihn heruntergeladen und werden in einmal durcharbeiten.

Um deine gewünschte Submenu-Formatierung noch einmal zu rekapitulieren habe ich nachfolgend drei Varianten zusammengestellt (in'nicht proportionaler Schrift'):

Code: Alles auswählen

Submenu-Variante-1:
 ----------------------------
|Menu-Item-1   Ctrl-A        |
|Menu-Item-2   Ctrl Shift-A  |
|Menu-Item-3   F8            |
|....                        |
|Menu-Item-x   Shift-B       |
 ----------------------------

Submenu-Variante-2:
 ----------------------------
|Menu-Item-1           Ctrl-A|
|Menu-Item-2     Ctrl Shift-A|
|Menu-Item-3               F8|
|....                        |
|Menu-Item-x          Shift-B|
 ----------------------------

Submenu-Variante-3:
 ----------------------------
|Menu-Item-1         Ctrl-A  |
|Menu-Item-2   Ctrl Shift-A  |
|Menu-Item-3             F8  |
|....                        |
|Menu-Item-x        Shift-B  |
 ----------------------------
Es ist natürlich nicht Python-Code aber um eine 'Nicht Proportionale' Schrift darzustellen war es nötig.

So wie ich das interpretiere gilt hier die dritte Variante mit 'Proportionaler' Schrift. Ich nehme an du möchtest auch den minimalen Zwischenraum zwischen Menu-Item und dem Shortcut und den leeren Raum auf der rechten Seite des Shortcuts als Option oder als fest definierten Wert vorgeben.

OK pütone ich werden versuchen mich in deinen Code einzuarbeiten. Eventuell gibt es noch einige Fragen.

Gruss wuf :wink:

Edit (BlackJack): Ich habe mal das Python-Syntaxhighlighting aus dem ``code``-Block heraus genommen.
Take it easy Mates!
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

numerix hat geschrieben:
lunar hat geschrieben:Es überrascht mich immer wieder, wie man selbst die schlechtesten Bibliotheken schön reden kann ...
Du bist ja echt kein Freund von Tkinter ... :?
Weiß auch nicht, warum er hier im Subforum noch kein Hausverbot bekommen hat. ;-)
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten