Seite 1 von 1

Vertikale Labels mit vertikalem Text

Verfasst: Montag 12. April 2004, 10:42
von Gast
Ist es möglich ein Label samt Text um 90° zu drehen, damit es vertikal steht? Dabei sollte der Text natürlich mitgedreht werden, so dass dieser auch vertikal steht.
Ist das mit Tkinter möglich?

Verfasst: Montag 12. April 2004, 13:13
von jocsch
Hallo!
Dazu fällt mir jetzt bloss ein, den Text mit irgendeiner Bildbearbeitungssoftware um 90°zu drehen und ihn dann als image bzw. bitmap auf das Label zu pappen (Label(image = ... bzw. bitmap = ...)). Wär doch für den Anfang schon mal ne Notlösung oder ?

Gruss, jocsch

Verfasst: Montag 12. April 2004, 13:36
von Dookie
Hallo,

das mit dem Drehen sollte auch mit PIL gehen.


Gruß

Dookie

Verfasst: Montag 12. April 2004, 17:03
von Gast
Das habe ich mir auch schon überlegt, allerdings wollte ich nach einer einfacheren Lösung fragen, da ich sehr viele Texte vertikal schreiben sollte und das alles zu bearbeiten ist sehr aufwendig.
Dann werde das einmal versuchen.

Verfasst: Dienstag 13. April 2004, 00:02
von DER Olf
kann man auf einem Tkinter label nicht mit arbeiten?
unter Delphi hätte ich das so gemacht:

Code: Alles auswählen

Label1.Caption := 'L'+#13+'a'+#13+'b'+#13;
das sollte doch eigentlich funktionieren.
kann man sowas nicht auf Tkinter übertragen?
oder auch in andere Toolkits (GTK, Qt, ...)

Verfasst: Dienstag 13. April 2004, 00:37
von Dookie
Hi DER Olf,

sollte gehen, dann sind die Zeichen halt nicht gedreht.

Code: Alles auswählen

labeltext = "Hallo Welt"
vertical = "\n".join(list(labeltext))
man kann das ganze auch in ein lambda packen.

Code: Alles auswählen

vertical = lambda x:  "\n".join(list(x))
print vertical(labeltext)

Gruß

Dookie

Verfasst: Dienstag 13. April 2004, 01:05
von DER Olf
aha...
der delphi ansatz ist deutlich einfacherer zu lesen :)

ps: was ist ein lambda?? :roll:

Verfasst: Dienstag 13. April 2004, 13:00
von Dookie
man könnte es auch so schreiben in Python:

Code: Alles auswählen

Label1.Caption = 'L'+'\n'+'a'+'\n'+'b'+'\n'+'e'+'\n'+'l'
mach das mal bei längeren Texten oder 20 Labels. Da lass ich das lieber Python machen.

lambda ist eine anonyme Funktion. Wird hauptsächlich bei "functional Programming" eingesetzt, zur Listenverarbeitung zusammen mit map, reduce und filter. Kann aber auch z.B. bei GUI-Programmierung zum wrappen von Funktionen eingesetzt werden. Oder wie im konkreten Fall, als Ersatz für eine Funktion.

Code: Alles auswählen

vertical = lambda x:  "\n".join(list(x))
ist equivalent zu

Code: Alles auswählen

def vertical(x):
    return "\n".join(list(x))
Gruß

Dookie

Verfasst: Dienstag 13. April 2004, 17:02
von wuf
Hallo Python-Tinker-Freunde

Wenn die einzelnen Zeichen des Labeltextes
nicht unbedingt legen müssen sondern vertikal
stehen dürfen geht es natürlich auch so:

Code: Alles auswählen

import sys
from Tkinter import *

def ende():
	sys.exit(0)

hauptfenster = Tk()

labeltext = "Vertikal"
height    = len(labeltext)

# Label
lb = Label(hauptfenster,fg='blue',
			relief     = 'raised',
			bg         = 'khaki',
			border     = '2',
			text       = labeltext,
			width      = 2,
			height     = height,
			wraplength = 1)
lb.pack(pady = 5)

bende = Button(hauptfenster, text = "Ende",command = ende)
bende.pack(pady = 5)

hauptfenster.mainloop()
Slogan: Tkinter is not Delphi or MS-VB, it's TCL

Gruss wuf :wink:

Verfasst: Dienstag 13. April 2004, 19:12
von hans
wuf hat geschrieben:Slogan: Tkinter is not Delphi or MS-VB, it's TCL
Hast recht!

Aber wo wir schon einmal bei Delphi sind: Ich habe einmal etwas unter Delphi programmiert. Das ging mit Windows API Funktion CreateFont

Code: Alles auswählen

HFONT CreateFont(
  int nHeight,               // height of font
  int nWidth,                // average character width
  int nEscapement,           // angle of escapement
  int nOrientation,          // base-line orientation angle
  int fnWeight,              // font weight
  DWORD fdwItalic,           // italic attribute option
  DWORD fdwUnderline,        // underline attribute option
  DWORD fdwStrikeOut,        // strikeout attribute option
  DWORD fdwCharSet,          // character set identifier
  DWORD fdwOutputPrecision,  // output precision
  DWORD fdwClipPrecision,    // clipping precision
  DWORD fdwQuality,          // output quality
  DWORD fdwPitchAndFamily,   // pitch and family
  LPCTSTR lpszFace           // typeface name
);
Genaue Beschreibung siehe Dokumentation hier ich glaube, die Drehung wurde mit nOrientation eingestellt. Ausgabe erfolgte dann einfachg dadurch, dass auf den Canvas geschrieben wurde.

Ich weiß, daß das hier nicht die gesuchte Lösung ist, aber vielleicht könnt ihr davon was ableiten.

Hans