Kontrolka Treeview w tkinter

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 6552 razy

Ta kontrolka umożliwia tworzenie rozgałęziające się listy zwijane. Jest często spotykana w programach do przeglądania zawartości folderów, w oknach dialogowych z zaawansowanym systemem ustawień programu. W końcu w programie Regedit systemu Windows, który służy do przeglądania rejestru systemowego. Nie ma co jednak gadać zbyt długo, lepiej poświęcić nieco swojego czasu i zerknąć łaskawym okiem na kod programu:

import tkinter as tk import tkinter.ttk as ttk #import tkinter.messagebox as msb class Application: def __init__(self): self.window = tk.Tk() self.treeview = ttk.Treeview(self.window) # tworzenie kontrolki Treeview africa_countries = ['Algieria ', 'Angola ', 'Benin ', 'Botswana ', 'Burkina Faso ', 'Burundi ', 'Czad ', 'Demokratyczna Republika Konga ', 'Dżibuti ', 'Egipt ', 'Erytrea ', 'Etiopia ', 'Gabon ', 'Gambia ', 'Ghana ', 'Gwinea ', 'Gwinea Bissau ', 'Gwinea Równikowa ', 'Kamerun ', 'Kenia ', 'Komory ', 'Kongo ', 'Lesotho ', 'Liberia ', 'Libia ', 'Madagaskar ', 'Malawi ', 'Mali ', 'Maroko ', 'Mauretania ', 'Mauritius ', 'Mozambik ', 'Namibia ', 'Niger ', 'Nigeria ', 'Południowa Afryka ', 'Republika Środkowoafrykańska ', 'Republika Zielonego Przylądka ', 'Rwanda ', 'Senegal ', 'Seszele ', 'Sierra Leone ', 'Somalia ', 'Suazi ', 'Sudan ', 'Sudan Południowy ', 'Tanzania ', 'Togo ', 'Tunezja ', 'Uganda ', 'Wybrzeże Kości Słoniowej ', 'Wyspy Świętego Tomasza i Książęca ', 'Zambia ', 'Zimbabwe '] self.add_values(africa_countries, "Afryka") # tworzenie drzewa z gałęziami australia_and_oceania_countries = ['Australia ', 'Fidżi ', 'Kiribati ', 'Mikronezja ', 'Nauru ', 'Nowa Zelandia ', 'Palau ', 'Papua-Nowa Gwinea ', 'Samoa ', 'Tonga ', 'Tuvalu ', 'Vanuatu ', 'Wyspy Marshalla ', 'Wyspy Salomona'] self.add_values(australia_and_oceania_countries, "Australia i Oceania") # metoda klasy, która doda całą gałąź drzewa do istniejącego już pnia asia_countries = ['Afganistan ', 'Arabia Saudyjska ', 'Armenia ', 'Azerbejdżan ', 'Bahrajn ', 'Bangladesz ', 'Bhutan ', 'Brunei ', 'Chiny ', 'Cypr ', 'Filipiny ', 'Gruzja ', 'Indie ', 'Indonezja ', 'Irak ', 'Iran ', 'Izrael ', 'Japonia ', 'Jemen ', 'Jordania ', 'Kambodża ', 'Katar ', 'Kazachstan ', 'Kirgistan ', 'Korea Południowa ', 'Korea Północna ', 'Kuwejt ', 'Laos ', 'Liban ', 'Malediwy ', 'Malezja ', 'Mjanma ', 'Mongolia ', 'Nepal ', 'Oman ', 'Pakistan ', 'Rosja ', 'Singapur ', 'Sri Lanka ', 'Syria ', 'Tadżykistan ', 'Tajlandia ', 'Timor Wschodni ', 'Turcja ', 'Turkmenistan ', 'Uzbekistan ', 'Wietnam ', 'Zjednoczone Emiraty Arabskie'] self.add_values(asia_countries, "Azja") european_countries = ['Albania', 'Andora', 'Austria', 'Belgia', 'Białoruś', 'Bośnia i Hercegowina', 'Bułgaria', 'Chorwacja', 'Czarnogóra', 'Czechy', 'Dania', 'Estonia', 'Finlandia', 'Francja', 'Grecja', 'Hiszpania', 'Holandia', 'Irlandia', 'Islandia', 'Kazachstan', 'Liechtenstein', 'Litwa', 'Luksemburg', 'Łotwa', 'Macedonia', 'Malta', 'Mołdawia', 'Monako', 'Niemcy', 'Norwegia', 'Polska', 'Portugalia', 'Rosja', 'Rumunia', 'San Marino', 'Serbia', 'Słowacja', 'Słowenia', 'Szwajcaria', 'Szwecja', 'Turcja', 'Ukraina', 'Watykan', 'Węgry', 'Wielka Brytania', 'Włochy'] self.add_values(european_countries, "Europa") south_america_countries = ['Argentyna ', 'Boliwia ', 'Brazylia ', 'Chile ', 'Ekwador ', 'Gujana ', 'Kolumbia ', 'Paragwaj ', 'Peru ', 'Surinam ', 'Trynidad i Tobago ', 'Urugwaj ', 'Wenezuela'] self.add_values(south_america_countries, "Południowa Ameryka") north_america_countries = ['Antigua i Barbuda ', 'Bahamy ', 'Barbados ', 'Belize ', 'Dominika ', 'Dominikana ', 'Grenada ', 'Gwatemala ', 'Haiti ', 'Honduras ', 'Jamajka ', 'Kanada ', 'Kostaryka ', 'Kuba ', 'Meksyk ', 'Nikaragua ', 'Panama ', 'Saint Kitts i Nevis ', 'Saint Lucia ', 'Saint Vincent i Grenadyny ', 'Salwador ', 'Stany Zjednoczone'] self.add_values(north_america_countries, "Północna Ameryka") poland_woj = ['dolnośląskie ', 'kujawsko-pomorskie ', 'lubelskie ', 'lubuskie ', 'łódzkie ', 'małopolskie ', 'mazowieckie ', 'opolskie ', 'podkarpackie ', 'podlaskie ', 'pomorskie ', 'śląskie ', 'świętokrzyskie ', 'warmińsko-mazurskie ', 'wielkopolskie ', 'zachodniopomorskie'] self.add_items("Polska", ['Województwa']) # metoda klasy, która doda gałęzie do istniejącego już drzewa self.add_items("Województwa", poland_woj) self.treeview.bind("<<TreeviewSelect>>", self.on_tv_select) # podpinam zdarzenie, wywoływane, gdy kliknięto jakiś element drzewa # reszta to nudne i przyziemne podpinanie kontrolki scrollbar oraz pozycjonowanie scrollbara i kontrolki treeview self.sb_treeview = tk.Scrollbar(self.window) self.treeview.config(yscrollcommand = self.sb_treeview.set) self.sb_treeview.config(command = self.treeview.yview) self.sb_treeview.place(in_ = self.treeview, relx = 1., y = 0, relheight = 1.) self.treeview.place(x = 0, y = 0, relwidth = 1., relheight = 1., width = -18) self.window.mainloop() def add_values(self, values, name): # metoda wstawiająca nowe drzewo z gałęzią value = self.treeview.insert("", 'end', name, text = name) # dodanie nowego drzewa (korzenia głównego) for i in values: self.treeview.insert(value, 'end', i, text = i) # dodawanie kolejnych gałęzi drzewa def add_items(self, iid, values): # dodawanie podgałęzi do istniejącej gałęzi drzewa for i in values: self.treeview.insert(iid, 'end', i, text = i) # dodawanie podgałęzi drzewa def on_tv_select(self, event): # metoda podpięta pod zdarzenie wywoływane po kliknięciu jakiegoś elementu na liście curItem = self.treeview.focus() # element, który otrzymał fokus print(self.treeview.item(curItem)["text"]) # wyświetlanie w konsoli tekstu z klikniętego elementu drzewa #msb.showinfo("Info", self.treeview.item(curItem)["text"]) apl = Application()

Jak powyższy kod zadziała to powinno pojawić się okienko takie, jak na poniżej załączonym obrazku.

Kontrolka Treeview utworzona w module tkinter z wykorzystaniem Pythona
Rys. 1
Kontrolka Treeview w akcji.
Propozycje książek