Seite 2 von 2

Verfasst: Donnerstag 11. März 2010, 18:25
von DeKugelschieber
so das löschen klappt jetzt perfekt, ich hab auch noch "clear()" hinzugefügt.

Code: Alles auswählen

    def delete(self, id, end = None):
        if id <= len(self.items)-1:
            if end == None:
                end = id+1
            elif end > len(self.items)-1:
                end = len(self.items)
            else:
                end = end+1
            for tmp in self.items[id:end]:
                tmp[0].pack_forget()            
            del self.items[id:end]
            self.show_items()
            
    def clear(self):
        self.delete(0, len(self.items))
            
    def show_items(self):            
        for i, tmp in enumerate(self.items):            
            if i == self.selected:
                tmp[0].config(bg = '#3399ff')
                tmp[1].config(bg = '#3399ff', fg = '#ffffff')
                tmp[2].config(bg = '#3399ff')
            tmp[0].pack(side = TOP, fill = BOTH)
Bleibt nurnoch zu klären warum an dem Canvas keine Scrollbar angezeigt wird und wie man die Breite setzen kann.

Verfasst: Freitag 12. März 2010, 17:21
von DeKugelschieber
Muss ich jetzt für jede Frage einen neuen Thread aufmachen oder was? Wenn ja sagt bescheid...

Verfasst: Freitag 12. März 2010, 18:02
von wuf
Hallo DeKugelschieber

Die Scrollbar musst du aus der Tkinter-Widget-Gerümpelkammer holen:
Get the Scrollbars
Sie kommt nicht selber.

Gruß wuf :wink:

Verfasst: Samstag 13. März 2010, 11:32
von DeKugelschieber
Das ist schon klar, ich les mir das durch und probiers nochmla, danke

Verfasst: Montag 15. März 2010, 15:40
von DeKugelschieber
Ich bekomm das einfach nicht hin mit den zwei Scrollbars. Hier der Code:

http://paste.pocoo.org/show/189872/

Verfasst: Montag 15. März 2010, 19:23
von wuf
Hallo DeKugelschieber

Bravo! Das Einrücken mit 4 Space-Tabs schein zu klappen. Hier etwas zum ausprobieren:
Canvas with Scrollbars

Gruß wuf :wink:

Verfasst: Montag 15. März 2010, 21:08
von DeKugelschieber
ja das einrücken klappt ^^. Ich probier dann mal weiter xD

Verfasst: Samstag 20. März 2010, 16:59
von DeKugelschieber
So ich hab jetzt länger mal Pause gemacht (hatte andere Sachen zu tun). Ich komm mit den Scrollbars irgendwie nicht weiter. Wenn ich

Code: Alles auswählen

canvas.create_window(0, ypos, window = lab, anchor = N+W)
benutze Scrollen die Labels zwar mit, aber das kann ich nicht gut auf mein Programm übertragen. Da hab ich nur ein Frame (vill. liegt es ja daran) in dem ganz viele Labels sind. Die Höhe und Breite (bzw. Scrollregion) kann man mit get_scrollregion() ermitteln (gibt richtige Werte aus). Wenn ich für das Canvas dann scrollregion = lb_canvas.get_scrollregion() anwende werden die Scrollbars in der richtigen größe angezeigt, aber es wird nicht gescrollt!
Hier der gesamte Code:

http://paste.pocoo.org/show/191841/

Verfasst: Sonntag 21. März 2010, 14:36
von DeKugelschieber
Eigentlich will ich wissen wie ich jetzt ein Frame mit Labels in einem Canvas scrolle...

Verfasst: Montag 22. März 2010, 07:51
von wuf
Hallo DeKugelschieber

Um dein relativ komplexes Skript auszuprobieren brauche man noch das Skript 'IconList', welches du importierst.

Gruss wuf :wink:

Verfasst: Montag 22. März 2010, 12:59
von DeKugelschieber
Ja natürlich, hier einfach mal das gesamte Programm:

http://marvinblum.de/Test/mc_tutor_2010.zip

Verfasst: Montag 22. März 2010, 16:39
von wuf
..... Danke! Ich arbeite unter Linux und utf8. Kann die Datei IconList.pyc nicht lesen. Braucht zu viele Anpassungen um dein Skript auf meinem Sytem zum laufen zu bringen. Kann dir leider nicht weiter helfen.

Gruss wuf :wink:

Verfasst: Montag 22. März 2010, 17:18
von DeKugelschieber
Naja resultat ist dass alles ist so wie es soll, aber die Scrollbalken den Content des Canvas nicht scrollen.

Verfasst: Montag 22. März 2010, 17:44
von yipyip
Ich habe mal wuf's Code etwas modifiziert:

Code: Alles auswählen

try:
  import Tkinter as tk
except ImportError:
  import tkinter as tk

root = tk.Tk()    

canvas = tk.Canvas(root, bg='white')
canvas.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)
frame = tk.Frame(canvas, bd=0, relief=tk.SUNKEN)

xscrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)
xscrollbar.config(command=canvas.xview)
xscrollbar.grid(row=1, column=0, sticky=tk.E+tk.W)

yscrollbar = tk.Scrollbar(root, orient=tk.VERTICAL)
yscrollbar.config(command=canvas.yview)
yscrollbar.grid(row=0, column=1, sticky=tk.N+tk.S)

canvas.config(xscrollcommand=xscrollbar.set)
canvas.config(yscrollcommand=yscrollbar.set)

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

labs = [tk.Label(frame, text='%s %s %d' % ('very, ' * 20, 'very long label:', i))
        for i in range(111)]
for lab  in labs:
  lab.pack(side=tk.TOP)

canvas.create_window(0, 0, window=frame, anchor=tk.NW)
canvas.update_idletasks()
canvas.config(scrollregion=canvas.bbox(tk.ALL))

root.mainloop()

Das muesstest Du eigentlich an Deinen Code (ohne ihn mir naeher angeschaut zu haben) anpassen koennen.

:wink:
yipyip

Verfasst: Dienstag 23. März 2010, 11:58
von DeKugelschieber
Jaaaaaaaaa! Vielen Danke! Klappt super, danke. Im prinzip war das Problem nur create_window(0, 0, ...). Ich dachte die zweite 0 währe eine Höhenangabe. Naja vielen Dank! Das fertige Programm gibt es hier:

http://marvinblum.de/Test/mc_tutor_2010.zip