Seite 1 von 1

Anfängerfrage - Scrollbar

Verfasst: Samstag 25. Februar 2012, 07:09
von djsilverado
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ß

Re: Anfängerfrage - Scrollbar

Verfasst: Samstag 25. Februar 2012, 11:35
von wuf
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:

Re: Anfängerfrage - Scrollbar

Verfasst: Samstag 25. Februar 2012, 11:45
von wuf
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: