Anfängerfrage - Scrollbar

Fragen zu Tkinter.
Antworten
djsilverado
User
Beiträge: 4
Registriert: Donnerstag 30. Dezember 2010, 12:36

Guten Morgen,

ich beschäftige mich momentan mit tkinter unter Python3 und möchte ein Programm erstellen, das aus verschachtelten Canvases (oder Canvii?) besteht, von denen einer halt eine Scrollbar haben soll, aber meine Versuche blieben bisher leider erfolglos...

Code: Alles auswählen

from tkinter import *

root = Tk()

hauptcanvas = Canvas(width=800, height=400, background="#FFFFFF", highlightthickness=0)
hauptcanvas.pack()

inhaltscanvas = Canvas(hauptcanvas, width=400, height=200, background="#000000", highlightthickness=0)
inhaltscanvas.place(x=50, y=50)

vscroll = Scrollbar(inhaltscanvas)
text_area = Text(inhaltscanvas, width=150, height=150, yscrollcommand=vscroll.set)
text_area.place(x=0, y=0)
vscroll.config(command=text_area.yview)

root.mainloop()

Kann mir einer von Euch vielleicht einen Tipp diesbezüglich geben, bzw. mich auf die richtige Fährte führen?

Vielen lieben Dank im Voraus.

Gruß
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Guten Morgen djsilverado

Willkommen in unserem Forum.

Hier etwas zum studieren. Die von mir gewählten Farben kannst du natürlich jederzeit auf deine Bedürfnisse anpassen. Sie sollen nur etwas Kontrast in die verwendeten Objekte im Hauptfenster bringen:

Code: Alles auswählen

from tkinter import *

root = Tk()
root.geometry("+%d+%d" % (10, 10))

hauptcanvas = Canvas(width=800, height=400, background="red",
    highlightthickness=0)
hauptcanvas.pack(side='left')

#~~ Hauptbehaelter fuer die zweite Canvas und Behaelter mit Textfeld 
#   und vertikaler Ziehleiste
frame = Frame(hauptcanvas)
frame.place(x=30, y=10)

#~~ ACHTUNG: Die Hoehe der Canvas ist von der Hoehe des Textfeldes (in Zeilen)
#            abhaengig!
inhaltscanvas = Canvas(frame, width=400, height=0, background="yellow",
    highlightthickness=0)
inhaltscanvas.pack(side='left', anchor='nw', fill='y')

#~~ Behaelter fuer Textfeld und vertikale Zieleiste
text_frame = Frame(frame, bg='blue')
text_frame.pack(side='right')

vscroll = Scrollbar(text_frame)
vscroll.pack(side='right', fill='y')

#~~ ACHTUNG: Die Option 'width' wird in Anzahl Zeichen und die Hoehe in
#            Anzahl Zeilen angegeben. Beide sind vom verwendeten Zeichensatz
#            abhaengig!
text_area = Text(text_frame, bg='green', width=30, height=18,
    bd=0, yscrollcommand=vscroll.set)
text_area.pack(side='left')

vscroll.config(command=text_area.yview)

root.mainloop()
Gruß wuf :wink:
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hier noch die Variante mit einem Canvas 'window'-Objekt:

Code: Alles auswählen

from tkinter import *

root = Tk()
root.geometry("+%d+%d" % (10, 10))

hauptcanvas = Canvas(width=800, height=400, background="red",
    highlightthickness=0)
hauptcanvas.pack(side='left')

#~~ Hauptbehaelter fuer die zweite Canvas & Behaelter mit Textfeld & vertikale
#   Ziehleiste
frame = Frame(root)
frame.pack()

#~~ ACHTUNG: Die Hoehe der Canvas ist von der Hoehe des Textfeldes (in Zeilen)
#            abhaengig!
inhaltscanvas = Canvas(frame, width=400, height=0, background="yellow",
    highlightthickness=0)
inhaltscanvas.pack(side='left', anchor='nw', fill='y')

#~~ Behaelter fuer Textfeld & vertikale Zieleiste
text_frame = Frame(frame, bg='blue')
text_frame.pack(side='right')

vscroll = Scrollbar(text_frame)
vscroll.pack(side='right', fill='y')

#~~ ACHTUNG: Die Option 'width' wird in Anzahl Zeichen und die Hoehe in
#            Anzahl Zeilen angegeben. Beide sind vom verwendeten Zeichensatz
#            abhaengig!
text_area = Text(text_frame, bg='green', width=30, height=18,
    bd=0, yscrollcommand=vscroll.set)
text_area.pack(side='left')

vscroll.config(command=text_area.yview)

hauptcanvas.create_window(100, 50, anchor='nw', window=frame)

root.mainloop()
Gruß wuf :wink:
Take it easy Mates!
Antworten