Seite 2 von 2

Verfasst: Montag 3. Dezember 2007, 16:41
von pyStyler
selectmode könnte die Lösung sein?

Code: Alles auswählen

tk.Listbox(hp, selectmode=tk.MULTIPLE)

Verfasst: Montag 3. Dezember 2007, 17:26
von sorgenlos
PROBLEM GELÖST

Selectmode bestimmt aber nur das Verhalten innerhalb einer Listbox.

Um zwei unabhängige Listboxen zu bekommen die sich nicht gegenseitig deselektiern nimmt man noch als zusatz:

Code: Alles auswählen

 tk.Listbox(hp, selectmode=tk.MULTIPLE, exportselection=0)

Verfasst: Sonntag 9. Dezember 2007, 18:29
von sorgenlos
Ich habe ein Problem, Beispiel:

Ich habe eine Listbox mit drei Einträgen (ja, nein, vlcht)
für jedes Objekt wurde vorher die auswahl für das Objekt in einer Liste gespeichtert (andere Informationen auch, spielt aber keine Rolle)

Wenn ich in der Liste nun hin und her switche zwichen den Objekten,

soll er die Auswahl in der Listbox aktualisieren um zu zeigen welche Auswahl für das Objekt in der Vergangenheit getätigt wurde.

Ich hab diverse Sachen schon ausprobiert wie zb. set.curseletion aber es funktioniert nicht.

Hat jemand von euch eine Idee wie ich das lösen könnte?

Verfasst: Montag 10. Dezember 2007, 13:15
von schlangenbeschwörer
könntest du dein problem etwas genauer formulieren? Vlt auch ein bisschen code oder so? Abstahieren hilft auch oft.

Verfasst: Dienstag 11. Dezember 2007, 01:36
von sorgenlos
hat sich von selbst gelöst das problem, lösung folgt morgen..

Aber ich hänge nun an folgendem Problem, ich will eine Listbox wieder deselektieren um veränderung vornehmen zu können.

Der Befehl funktionierte auch,

Code: Alles auswählen

self.listbox.selection_clear(self.listbox.curselection())
jedoch bekomme ich nun diesen Fehler:

Code: Alles auswählen

 File "C:gui.py", line 707, in neu
    self.listbox.selection_clear(self.listbox.curselection())
  File "C:\Python25\lib\lib-tk\Tkinter.py", line 2530, in selection_clear
    'selection', 'clear', first, last)
TclError: bad listbox index "": must be active, anchor, end, @x,y, or a number
EDIT

ich habs auch selbst geschafft :D

Code: Alles auswählen

self.listbox.selection_clear(0,x)
x = elemente in der liste -1

Verfasst: Samstag 14. Juni 2008, 15:58
von hsv_seiwert
Mein Vorschlag für eine Dropdown-box wäre folgender:

Code: Alles auswählen

global klick
klick=0
def ausgabe():
    global klick
    klick+=1
    if klick % 2 != 0:
        global textfenster
        textfenster= Text(fenster,width=29,height=10)
        textfenster.grid(row=1,columnspan=2)
    else:
        textfenster.grid_forget()
        
from Tkinter import*  
fenster = Tk()
entry=Entry(fenster)
entry.grid(row=0)
fenster.button = Button(fenster,text ="klick mich", command=ausgabe) 
fenster.button.grid(row=0,column=1) 
# Fenster anzeigen 
fenster.mainloop()

Verfasst: Sonntag 15. Juni 2008, 20:57
von numerix
Hallo, zunächst einmal: "Willkommen im Forum."

Wenn du dir dein Posting ansiehst, stellst du sicher fest, dass man den Code nicht besonders gut lesen kann. Das lässt sich verbessern, indem du ihn in Code-Tags setzt. Dazu gibt es in der Eingabemaske extra einen Button.

Das kannst du - via edit - auch nachträglich noch machen. Solltest du mal tun, dann gibt es vielleicht auch Reaktionen auf deine "Lösung".

Re: Dropdown Box mit Tkinter // Listbox Problem

Verfasst: Sonntag 17. März 2013, 14:41
von Nobuddy
Hallo zusammen

Ich habe das Beispiel von BlackJack verwendet und es soweit abgeändert, daß der Button überflüssig ist.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# For Python3.x

import tkinter as tk

class TestGUI:
    def __init__(self):
        fenster = tk.Tk()

        self.mylist = {0 : 'Hans', 1 : 'Peter', 2 : 'Thomas'}

        self.listbox = tk.Listbox(fenster,
                                  selectmode=tk.EXTENDED,
                                  width=10,
                                  height=len(self.mylist))
        for name in sorted(self.mylist):
            self.listbox.insert(tk.END, self.mylist[name])
            self.listbox.bind('<<ListboxSelect>>', self.check_select)
        self.listbox.pack()

    def check_select(self, event):
        """Überprüfe das Ereignis und führe den Auftrag aus"""
        indices = list(map(int, self.listbox.curselection()))
        result = ''.join([self.mylist[row]
            for row in sorted(self.mylist) if row == indices[0]])
        print(result)
        return result


if __name__ == '__main__':
    das_fenster = TestGUI()
    tk.mainloop()
Und in einem weiteren Beispiel, wird die Auswahl an das Entry-Feld übergeben.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# For Python3.x

import tkinter as tk

class TestGUI:
    def __init__(self):
        fenster = tk.Tk()
        self.entry=tk.Entry(fenster)
        self.entry.pack()

        self.mylist = {0 : 'Hans', 1 : 'Peter', 2 : 'Thomas'}

        self.listbox = tk.Listbox(fenster,
                                  selectmode=tk.EXTENDED,
                                  width=10,
                                  height=len(self.mylist))
        for name in sorted(self.mylist):
            self.listbox.insert(tk.END, self.mylist[name])
            self.listbox.bind('<<ListboxSelect>>', self.check_select)
        self.listbox.pack()

    def check_select(self, event):
        """Überprüfe das Ereignis und führe den Auftrag aus"""
        indices = list(map(int, self.listbox.curselection()))
        result = ''.join([self.mylist[row]
            for row in sorted(self.mylist) if row == indices[0]])
        self.entry.delete(0, tk.END)
        return self.entry.insert(tk.END, result)


if __name__ == '__main__':
    das_fenster = TestGUI()
    tk.mainloop()

Re: Dropdown Box mit Tkinter // Listbox Problem

Verfasst: Sonntag 31. März 2013, 17:25
von muffin
sorgenlos hat geschrieben:Hallo Leute, ich such schon seit einiger Zeit die Möglichkeit mit Tkinter eine Dropdownbox zu erstellen, in etwa so:
... und warum versuchst du es nicht mit einer ttk.combobox?