Είδα τον κώδικα
Ωραίος, Είναι πολύ βασικό ότι δουλεύει
Έχω κάνει κάποιες αλλαγές σου δείχνω τον κώδικα και εξηγώ
from tkinter import *
import requests
from bs4 import BeautifulSoup
#Μέσα στην κλάση αφήνω μόνο ότι έχει να κάνει με γραφικό κομμάτι όχι τελείως αλλά όσο μπόρεσα
# Μέσα από την κλάση καλώ τις συναρτήσεις που ψάχνουν τον σπιτόγατο η οποίες όμως είναι ξεχωριστές
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
self.populate_listbox()
def init_window(self):
self.pack(fill=BOTH, expand=1)
menu = Menu(self.master)
self.master.config(menu=menu)
file = Menu(menu)
file.add_command(label="Exit", command=self.quit)
menu.add_cascade(label="File", menu=file)
edit = Menu(menu)
edit.add_command(label="Undo")
menu.add_cascade(label="Edit", menu=edit)
quitButton = Button(self, text="Εξοδος",command=self.quit)
quitButton.place(x=300, y=290) #0.0 einai panv aristera.+x move dejia.+y move down
self.lb1=Listbox(self,width=60)##
self.lb1.pack()
#self.lb1.bind("<Double-1>", self.getSelection)
l = Label(root, text='Επιλογη σχολης για αναζητηση κατοικιας').place(x=120,y=180)
ltimapo=Label(root, text='Ενοικιο απο').place(x=10,y=220)
ltimews=Label(root, text='Ενοικιο εως').place(x=120,y=220)
timapo=Text(root, height=1, width=4).place(x=80,y=220)
timews=Text(root, height=1, width=4).place(x=190,y=220)
lembapo=Label(root, text='Εμβαδον απο').place(x=220,y=220)
embapo=Text(root, height=1, width=4).place(x=300,y=220)
lembews=Label(root, text='Εμβαδον εως').place(x=340,y=220)
embews=Text(root, height=1, width=4).place(x=420,y=220)
searchButton = Button(self, text="Αναζητηση", command=self.search_spitia) #,command=self.anazhthsh)
searchButton.place(x=100, y=290)
def populate_listbox(self):
for sxoli in get_sxoles_spitogatos():
self.lb1.insert(END, sxoli)
def search_spitia(self):
url_sxolis=self.lb1.get(self.lb1.curselection())[1]
print(get_spitia_sxolis(url_sxolis))
#Η συνάρτηση που παίρνει τις σχολές από τον σπιτόγατο είναι ξεχωριστή και ανεξάρτητη
def get_sxoles_spitogatos():
sxoles = []
url = "https://www.spitogatos.gr/students/"
r = requests.get(url)
soup = BeautifulSoup(r.text,'html.parser')
for link in soup.find_all('a'):
try :
st=link.get('href')
if st[0:35]==url:
sxoles.append((link.get_text().strip(),st))
except:
pass
return sxoles
# H συνάρτηση που παίρνει τα σπίτια για κάθε σχολή είναι ξεχωριστή
def get_spitia_sxolis(url_sxolis): #briskei ti kaneiw click stiw sxoles
r = requests.get(url_sxolis)
soup = BeautifulSoup(r.text,'html.parser')
if r.status_code !=200:
print('\n ----den brhka selida---')
spitia=[]
for link in soup.find_all('div',{'id':"listingsSection"}):
for lin in link.find_all('a',{'href':"#"} ):
for li in lin.find_all('div',{'class':"tableCell"}):
lek=li.text
lek=' '.join(lek.split())
val=lin.get('id')
spiti=lek+'#'+val+'?'
spitia.append(spiti)
if spitia==[]:
print('++++++++++den yparxoyn spitia++++++++++\n')
return spitia
root = Tk()
root.geometry("500x400")# se pixels
app=Window(root)
root.mainloop()
Έσβησα αρκετά κομμάτια από τον κώδικά σου για να γίνει πιο απλό
Η γενική ιδέα που προτείνω είναι να είναι ξεχωριστά το γραφικό κομμάτι
από τις συναρτήσεις που κάνουν το parse στο σπιτόγατο