Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from functools import partial
- import pprint as pp
- from settings import *
- from search_results_fm import search_result_item as sri
- class exp_window():
- def __init__(self):
- self.root = tk.Tk()
- self.root.title("Search")
- self.root.geometry("995x550+25+25")
- self.root.configure(bg=BG_COLOR)
- self.root.resizable(RESIZE,RESIZE)
- self.results_frame = results_frame(self.root)
- self.test_win = tk.Toplevel(self.root)
- self.test_win.title("Test controls")
- self.test_win.geometry("850x350+700+200")
- tk.Button(self.test_win,text="Test",font=FNT_NORMAL,bg=BG_COLOR,command=partial(self.results_frame.update_data,TEST_DATA)).grid(row=0,column=0,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
- tk.Button(self.test_win,text="Check Test Data",font=FNT_NORMAL,bg=BG_COLOR,command=partial(self.test_data,TEST_DATA)).grid(row=0,column=1,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
- self.test_win.bind("<Configure>",lambda event:self.check_details(event))
- def test_data(self,data):
- data = ""
- for entry in TEST_DATA:
- data += f"Title:{entry['title']}\nDescription:{entry['description']}\n\n"
- tk.Label(self.test_win,text=data,font=FNT_NORMAL,bg=BG_COLOR).grid(row=2,column=0,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE,columnspan=2)
- def check_details(self,event):
- pp.pprint(event.widget.winfo_geometry())
- def run(self):
- self.root.after(1000,self.test_win.mainloop())
- self.root.mainloop()
- class results_frame():
- def __init__(self,root,results=[]):
- self.results = results
- self.root = root
- self.frame = tk.Frame(self.root,bg=BG_COLOR,relief="groove",bd=2,width=750)
- self.frame.pack(fill=tk.BOTH, expand=True)
- self.results = []
- self.first_run()
- def test_binding(self,event):
- print(f"I am scrolling in {event.widget}")
- def first_run(self):
- tk.Label(self.frame,text=SEARCH_HEADER,font=FNT_NORMAL,bg=BG_COLOR).grid(row=0,column=1,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
- def update_data(self,data):
- self.results = data
- self.display_results()
- def clear_results(self):
- for widget in self.frame.winfo_children():
- widget.destroy()
- def _on_enter(self,event):
- print("I am hovering over the search results")
- def _on_mousewheel(self, event):
- print("spinning mouse wheel")
- self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")
- def display_results(self):
- self.clear_results()
- if len(self.results) > 0:
- self.canvas = tk.Canvas(self.frame)
- self.canvas.grid(row=0, column=0, sticky=tk.NSEW)
- scrollbar = tk.Scrollbar(self.frame, orient=tk.VERTICAL, command=self.canvas.yview)
- scrollbar.grid(row=0, column=1, sticky=tk.NS)
- self.canvas.configure(yscrollcommand=scrollbar.set)
- scrollable_frame = tk.Frame(self.canvas)
- self.canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
- row = 1
- tk.Label(scrollable_frame,text=SEARCH_RESULTS_HEADER,font=FNT_NORMAL,bg=BG_COLOR).grid(row=0,column=1,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
- for result in self.results:
- sri(scrollable_frame,result,row)
- row += 1
- self.canvas.bind("<MouseWheel>",self._on_mousewheel)
- scrollable_frame.update_idletasks()
- scrollable_frame.configure(scrollregion=self.canvas.bbox("all"))
- self.canvas.bind("<Configure>",self._update_scrollregion)
- else:
- tk.Label(self.frame,text=SEARCH_NO_RESULTS,font=FNT_NORMAL,bg=BG_COLOR).grid(row=0,column=0,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
- def _update_scrollregion(self,event):
- self.canvas.configure(scrollregion=self.canvas.bbox("all"))
- app = exp_window()
- app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement