Jak utrzymać aktywność wiersza w Listbox?

1

Cześć!

Listbox po lewej powinien mieć cały czas aktywny wybrany wiersz - jeśli kliknę do wyboru daty po prawej aktywność znika - jest jakiś prosty sposób aby wybrany wiersz w listbox po prawej był cały czas aktywny?

Przechwytywanie.PNG

1
harnasx napisał(a):

Cześć!

Listbox po prawej powinien mieć cały czas aktywny wybrany wiersz

Jak tu widzę na obrazku że jest po lewej.

Poza tym obiekt klasy Listbox ma metodę .selection_set(index) gdzie możesz dokonać selekcji pola o podanym indeksie. Można by do tego widżetu zbindować dodatkowo event <FocusOut> i w podanym callbacku zaznaczyć w liście odpowiednie pole lub pola. Albo robić to w callbackach innych widżetów?

... jest jakiś prosty sposób aby wybrany wiersz w listbox po prawej był cały czas aktywny?

ale to chyba oczywiste że dany widżet staje się nieaktywny jeżeli myszką klikniesz w inny. Chodzi ci pewnie, że jest nie zaznaczony a nie że nie aktywny?

0
jvoytech napisał(a):

Jak tu widzę na obrazku że jest po lewej.

Poza tym obiekt klasy Listbox ma metodę .selection_set(index) gdzie możesz dokonać selekcji pola o podanym indeksie. Można by do tego widżetu zbindować dodatkowo event <FocusOut> i w podanym callbacku zaznaczyć w liście odpowiednie pole lub pola. Albo robić to w callbackach innych widżetów?

... jest jakiś prosty sposób aby wybrany wiersz w listbox po prawej był cały czas aktywny?

ale to chyba oczywiste że dany widżet staje się nieaktywny jeżeli myszką klikniesz w inny. Chodzi ci pewnie, że jest nie zaznaczony a nie że nie aktywny?

po mojej prawej :) - jasne że po lewej - poprawiłem

tak zaznaczony żeby był cały czas - poniekąd "przepisuje" tą aplikacje z VBA na Pythona i tam nie było takiego problemu - raz zaznaczony wierz był zaznaczony w Listbox do momentu odznaczenia (ręcznie lub w kodzie)

czyli tylko przez "callback"? - przyszło mi to do głowy ale nie chciało się robić myśląc że można prościej

0

w tym lewym listbox mam funkcję która wykonuje się po zaznaczeniu wiersza

def listboxSelect(index):  #  funkcja pod zdarzenie <<ListboxSelect>> - wywoływane, gdy zmienione  zaznaczenie
    if ct_listbox.curselection() != ():
        global aktywnywiersz
        wybranynrszkody = ct_listbox.get(ct_listbox.curselection())
        aktywnywiersz = ct_listbox.curselection()
        labelnumerszkody1text.set(wybranynrszkody[0:15])  # [0:15] ogranicza liczbę wyświetlanych znaków

        # odczyt pliku dane.xml
        ReadXML(wybranynrszkody)
    ct_listbox.bind('<<ListboxSelect>>', listboxSelect)
        
        

i teraz jesli w innym miejscu kody zaznaczam "podświetlam" wiersz przez
ct_listbox.selection_set(aktywnywiersz)

to wykonuje mi się funkcja listboxSelect () - a nie chcę tego!! :(

jak to zrobić jeszcze inaczej?

0

Rozwiązanie jest banalne!!!!!
wystarczy parametr przy tworzeniu listy exportselection=False
i możemy sobie zaznaczać wiersze w kilku oknach

ct_listbox = tk.Listbox(window, exportselection=False)

1 użytkowników online, w tym zalogowanych: 0, gości: 1