Seite 1 von 1

Scrollbar mit mehreren Listboxen!

Verfasst: Mittwoch 5. Februar 2003, 21:56
von Tux
Hi @ll!

Hier mein Problem:

Ich habe 2 Listboxen und möchte beide mit einer Scrollbar bedienen! In den Listboxen sind immer gleich viele Einträge!

Es ist auch möglich, wenn ihr mir sagen könnt wie ich in eine Listbox so reinschreibe, dass die Daten in einer Tabelle sind!

Ich hoffe, dass jemand von euch ne Ahnung hat, wie das geht! Wenns geht schnell!
Danke

Verfasst: Mittwoch 5. Februar 2003, 23:45
von Dookie
Hi Tux,

wär ganz hilfreich, wenn Du angeben würdest, mit welchem GUI Du arbeitest, Tkinter, Gtk, QT, PyGame, OpenGL, ... ?

Gruß

Dookie

Antwort

Verfasst: Donnerstag 6. Februar 2003, 00:07
von Tux
Hi Dookie,

ich arbeite mit Tkinter!

Verfasst: Donnerstag 6. Februar 2003, 02:47
von Dookie
Hi Tux,

Code: Alles auswählen

class TwoListBoxes(): 
    def __init__(self, master):
        scrollbar = Scrollbar(master, orient=VERTICAL)
        self.b1 = Listbox(master, yscrollcommand=scrollbar.set)
        self.b2 = Listbox(master, yscrollcommand=scrollbar.set)
        scrollbar.config(command=self.yview)
        scrollbar.pack(side=RIGHT, fill=Y)
        self.b1.pack(side=LEFT, fill=BOTH, expand=1)
        self.b2.pack(side=LEFT, fill=BOTH, expand=1)
    
    def yview(self, *args):
        apply(self.b1.yview, *args)
        apply(self.b2.yview, *args)

mylistboxes = TwoListBoxes(master)
master ist der Container (Frame oder Fenster) in dem die beiden Listboxen mit dem Scrollbalken erscheinen sollen. Die beiden Listboxen kannst Du über mylistboxes.b1 und mylistboxes.b2 ansprechen und mit Daten füttern, achte darauf, daß immer beide Listboxen die gleiche Anzahl an Zeilen haben!

das Prinzip habe ich hier -> http://www.pythonware.com/library/tkint ... tterns.htm gefunden.


Gruß

Dookie

Größe ändern

Verfasst: Donnerstag 6. Februar 2003, 10:35
von Tux
Hi Dookie!

Danke - es funktioniert ausgezeichnet!

Gibt es die Möglichkeit die Listboxen schmaler zu machen und dafür etwas länger? Wenn ja, wie geht das?

Verfasst: Donnerstag 6. Februar 2003, 17:55
von Dookie
Hi Tux,

die beiden Listboxen mit dem Scrollbalken passen sich dem Kontainerobjekt (Frame oder Window) in der Größe automatisch an. Also einfach das Fenster vergrößern und dann sollten auch die Boxen größer werden. Dei Größe von Fenstern kannst Du z.B. über window.minsize(width, height) und window.maxsize(width, height) einstellen. Bei Frames kannst Du direkt beim Erstellen die Optionen width und height angeben.


Gruß

Dookie

geht nicht

Verfasst: Donnerstag 6. Februar 2003, 23:00
von Tux
Hi Dookie!

Gibt es auch eine Möglichkeit die Listboxen nicht in extraframes zu machen und trotzdem mit grid es hinzubekommen, dass sie nicht so breit sind!

ICH

Verfasst: Donnerstag 6. Februar 2003, 23:51
von Dookie
hmm sollte gehen, aber ich hab grid noch nie gebraucht, alternativ kannst ja auch links oder rechts noch einen (leeren) frame hinmachen, der nimmt dann auch seinen Platz ein. Oder die Boxen in einen Frame stecken, dem du eine feste breite gibst, ist allerdings, falls Du das Script weitergeben willst nicht zu empfehlen.

Gruß

Dookie

Element auslesen

Verfasst: Sonntag 16. Februar 2003, 09:36
von Tux
Hi @ll

Ich habe mit Tkinter 3 Listboxen erzeugt! Man kann aber in den 3 Listboxen immer nur ein Element markieren (ist auch gut so)! Wie kann man aber jetzt dieses Element herausfinden - die Listboxen haben doch verschiedene Namen!

Danke schon mal

Re: Element auslesen

Verfasst: Sonntag 16. Februar 2003, 11:18
von Voges
Hallo!
Tux hat geschrieben:Man kann aber in den 3 Listboxen immer nur ein Element markieren (ist auch gut so)!
Findest Du? Ich finde dieses Verhalten etwas eigenwillig. Wenn ich 3 Listboxen habe, will ich in der Regel in jeder der 3 Boxen einen Eintrag markieren können und nicht insgesamt nur einen einzigen. Dieses Default-Verhalten kann man aber mit exportselection=0 abschalten.
Wie kann man aber jetzt dieses Element herausfinden - die Listboxen haben doch verschiedene Namen!
Zum Glück! Du rufst für jede Listbox die Methode curselection() auf. Besonders einfach, wenn Du die Listboxen vorher in eine Liste gepackt hast:

Code: Alles auswählen

for i in range(len(listboxes)):
    cursel = listboxes[i].curselection()
    if cursel:
        print "markiert: Eintrag %s in der Listbox %d" % (cursel[0],i)
        break # es kann nur einen geben
Jan

Danke - werde es testen

Verfasst: Sonntag 16. Februar 2003, 14:50
von Tux
Hi Voges!

Im Normalfall ist es besser, wenn man in jeder Listbox was markieren kann, aber für mich ist es halt so besser!

Ich werde es mal testen!

DANKE

ersetzen

Verfasst: Mittwoch 19. Februar 2003, 14:00
von Tux
Da alle guten Dinge 3 sind, hab ich hier noch ein 3. Problem:

Ich habe eine Listbox im Tkinter! Wie kann ich einen bestimmten Eintrag durch einen anderen ersetzen?

Danke schon mal

Re: ersetzen

Verfasst: Mittwoch 19. Februar 2003, 14:33
von Voges
Hallo!
Tux hat geschrieben:Wie kann ich einen bestimmten Eintrag durch einen anderen ersetzen?
Direktes Ändern des Strings geht AFAIK nicht. Da wirst Du Delete() und Insert() kombinieren müssen.
Jan