Ο κώδικας χρειάζεται λίγο συμμάζεμα, σου λέω μερικά σημεία που καλό είναι να βελτιώσεις
Στην κλάση άλλα widgets τα κάνεις pack και άλλα τα κάνεις place πρέπει να χρησιμοποιείς μία μέθοδο και ως πιο κατάλληλη προτείνω την τρίτη που υπάρχει grid
'Αλλα widgets τα βάζεις στο self και άλλα τα βάζεις στο root, αφού δεν υπάρχει root! τυχαίνει να δημιουργείς ένα μετά αλλά αν δεν ονομαστεί root αλλά κάπως αλλιώς???
Όλα λοιπόν τα widget πρέπει να μπούνε στο self
Την init μπορείς να την κάνεις έτσι
class Window(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent) # do superclass init
self.pack()
self.init_window()
self.populate_listbox()
To self.master δεν χρειάζεται τον titlo και το menu θα τα κάνεις εκτός κλάσης
στην κλάση κάνεις μόνο το Frame self που έχει όλη τη λειτουργία του προγράμματός σου.
Στην συνάρτηση get_spitia_sxolis(self,url_sxolis) έχεις παράμετρο self. Αφού είναι εκτός κλάσης το self δεν χρειάζεται.
Εάν σε μιά συνάρτηση θές να περάσεις ένα object κλάσης ως παράμετρο χρησιμοποιείς
το όνομα της κλάσης με μικρά ή τη λέξη object
Η get_details_per_house(self,link_list) είναι επίσης εκτός κλάσης και έχει παράμετρο self
και το ότι καλεί messagebox μου φαίνεται κάπως παράξενο
Πάμε στο πρόβλημα βλέπω ότι τα spita τα παράγεις στην get_spitia_sxolis(self,url_sxolis) και εκεί είναι και τα url μέσα στην link_list
Τα σπίτια λόγω του ότι δημιουργούνται λάθος έχουν διπλές καταχωρήσεις μιά είναι μόνο το listing και μετά η περιγραφή με το listing μαζί το 1ο δεν το χρειάζεσαι είναι περιτό
spitia=[spitia[i] for i in range(1, len(spitia),2)] Αυτή τη γραμμή θα τη βάλεις πριν απο εκεί που λες sw=0 ακριβώς έξω από βρόγχους
στο τέλος πάνω από εκεί που λέει
return spitia θα βάλεις spitia = list(zip(spitia,link_list))
Tώρα η συνάρτηση σου θα επιστέφει lista με tuples
Εάν βάλεις τώρα τα στοιχεία ως tuples στο lb2 το url του κάθε σπιτιού μπορείς να το πάρεις με lb2.get(lb2.curselection())[1]
Εάν δεν το βάλεις όλο στη lb2 και βάλεις μόνο το spiti[0] for spiti in spitia
μπορείς πάλι να το πάρεις το url με spitia[lb2.curselection()][1] H lb2.curselection() δίνει το index της lb2 το οποίο βρίσκεται σε αντιστοιχεία με το index της spitia εφόσον έβαλες τα στοιχεία με τη σειρά
στη συνάρτηση τώρα με το event
def handler_lb2(self, event):
url=spitia[lb2.curselection()][1]
details=get_details_per_house(url)
messagebox.showinfo(details)
που σημαίνει ότι η get_details_per_house(url)πρέπει να παίρνει μια παράμετρο και να επιστέφει str και τα άλλα να φύγουν
Ελπίζω να μη σε μπέρδεψα, έτσι θα το έκανα εγώ
Επίσης όπως σου ξαναείπα το πρόγραμμα έχει γίνει λίγο μπερδεμένο
Σπάστο σε μικρές απλές συναρτήσεις και σε περισσότερα αρχεία.