Scrollbar mit mehreren Listboxen!

Fragen zu Tkinter.
Antworten
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Tux,

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

Gruß

Dookie
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

Hi Dookie,

ich arbeite mit Tkinter!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

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?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

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
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

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
Tux
User
Beiträge: 70
Registriert: Freitag 8. November 2002, 23:07
Kontaktdaten:

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
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
Antworten