Frame aus Frame löschen mit Objekt aus Liste

Fragen zu Tkinter.
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

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.
MfG DeKugelschieber
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Muss ich jetzt für jede Frage einen neuen Thread aufmachen oder was? Wenn ja sagt bescheid...
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo DeKugelschieber

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

Gruß wuf :wink:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Das ist schon klar, ich les mir das durch und probiers nochmla, danke
MfG DeKugelschieber
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ich bekomm das einfach nicht hin mit den zwei Scrollbars. Hier der Code:

http://paste.pocoo.org/show/189872/
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo DeKugelschieber

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

Gruß wuf :wink:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

ja das einrücken klappt ^^. Ich probier dann mal weiter xD
MfG DeKugelschieber
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

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/
MfG DeKugelschieber
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Eigentlich will ich wissen wie ich jetzt ein Frame mit Labels in einem Canvas scrolle...
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo DeKugelschieber

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

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ja natürlich, hier einfach mal das gesamte Programm:

http://marvinblum.de/Test/mc_tutor_2010.zip
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

..... 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:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Naja resultat ist dass alles ist so wie es soll, aber die Scrollbalken den Content des Canvas nicht scrollen.
MfG DeKugelschieber
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

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
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

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
MfG DeKugelschieber
Antworten