Vertikale Labels mit vertikalem Text

Fragen zu Tkinter.
Gast

Vertikale Labels mit vertikalem Text

Beitragvon Gast » Montag 12. April 2004, 10:42

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?
jocsch
User
Beiträge: 31
Registriert: Freitag 4. April 2003, 13:09
Wohnort: Egloffstein (Hundshaupten)

Beitragvon jocsch » Montag 12. April 2004, 13:13

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 12. April 2004, 13:36

Hallo,

das mit dem Drehen sollte auch mit PIL gehen.


Gruß

Dookie
Gast

Beitragvon Gast » Montag 12. April 2004, 17:03

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.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Beitragvon DER Olf » Dienstag 13. April 2004, 00:02

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, ...)
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Dienstag 13. April 2004, 00:37

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
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Beitragvon DER Olf » Dienstag 13. April 2004, 01:05

aha...
der delphi ansatz ist deutlich einfacherer zu lesen :)

ps: was ist ein lambda?? :roll:
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Dienstag 13. April 2004, 13:00

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
Benutzeravatar
wuf
User
Beiträge: 1368
Registriert: Sonntag 8. Juni 2003, 09:50

Beitragvon wuf » Dienstag 13. April 2004, 17:02

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:
Take it easy Mates!
Benutzeravatar
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Beitragvon hans » Dienstag 13. April 2004, 19:12

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder