For some reason my scroll bar isn’t working. I’ve tried various methods such as using different frames and creating my own scroll function however nothing seems to work. I think it might have something to do with the packing method perhaps.
I manage to get the scrollbar working with listboxes but it’s a completely different ball game with whole frames.
from tkinter import *
import shutil
import csv
from tkinter import filedialog
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
def sign_in():
if username_entryfield.get() == '':
if password_entryfield.get() == '':
print('signed in as user')
main_page.tkraise() # Raise the main frame
else:
print('incorrect password')
else:
print('incorrect user name')
global counter
counter = -1
def display_csv(filename):
global counter
rows = []
with open(f"{filename}", 'r') as file:
csvreader = csv.reader(file)
header2 = next(csvreader)
for row in csvreader:
counter += 1
if counter >= 3:
data_listbox.insert(END, f' {int(row[0])} {round(float(row[1]))} {round(float(row[2]))}')
rows.append(row)
print(row)
def open_finder_and_copy_to_project():
root = Tk()
root.withdraw() # Hide the main window
# Open Finder to select a file
file_path = filedialog.askopenfilename(title="Select a file")
# Copy the selected file to your project folder
if file_path:
if '.csv' in file_path:
try:
project_folder = '/Users/Pap0010/Desktop/VISUALIZETHIS' # Specify your project folder
shutil.copy(file_path, project_folder)
print("File copied to project folder successfully!")
data_menu.tkraise()
display_csv(file_path)
except Exception as e:
print(f"Error: {e}")
else:
print('Invalid csv file')
def clear1():
username_entryfield.delete(0, 'end')
password_entryfield.delete(0, 'end')
def plot():
ax.clear()
x = np.random.randint(0,10,10)
y = np.random.randint(0,10,10)
ax.scatter(x,y)
canvas.draw()
win = Tk()
win.title('Visualize')
win.geometry('1920x1080')
display_frame = Frame(win)
display_frame.configure(width=1920,height=980,bg='#2F2F2F')
display_frame.place(x=0,y=100)
data_menu = Frame(win)
data_menu.configure(width=1920,height=980,bg='#2F2F2F')
data_menu.place(x=0,y=100)
column_header = Frame(data_menu)
column_header.configure(width=1920,height=50,bg='white')
column_header.place(x=0,y=0)
overlay_frame = Frame(win)
overlay_frame.configure(width=300,height=200,bg='white')
overlay_frame.place(x=1100,y=100)
display_frame = Frame(win)
display_frame.configure(width=1920,height=980,bg='#2F2F2F')
display_frame.place(x=0,y=100)
main_page = Frame(win)
main_page.configure(width=1920,height=1080,bg='#2F2F2F')
main_page.place(x=0,y=0)
body_frame = Frame(main_page)
body_frame.configure(width=1620,height=980,bg='green')
body_frame.place(x=300,y=0)
menu_page = Frame(main_page)
menu_page.configure(width=300,height=1080,bg='white')
menu_page.place(x=0,y=0)
header = Frame(main_page)
header.configure(width=1920,height=100,bg='grey')
header.place(x=0,y=0)
Login_page = Frame(win)
Login_page.configure(width=1920,height=1080,bg='#2F2F2F')
Login_page.place(x=0,y=0)
Heading1 = Label(Login_page,text='VISUALIZE THIS',font=("Arial", 40),fg='white')
Heading1.place(x=540,y=100)
username_entryfield = Entry(Login_page,width=15,bg='white',fg='black',font=("Arial", 40))
username_entryfield.place(x=500,y=200)
password_entryfield = Entry(Login_page,width=15,bg='white',fg='black',font=("Arial", 40),show='*')
password_entryfield.place(x=500,y=300)
enter_button = Button(Login_page, text='Sign In', font=("Arial", 20, "bold"),bg='blue',fg='white',command=sign_in)
enter_button.place(x=625,y=400)
#Header
logo = Button(header, text='', bg='white',width=3,height=3,command=lambda:main_page.tkraise())
logo.place(x=50,y=25)
profile = Button(header, text='', bg='white',width=3,height=3, command=lambda:overlay_frame.tkraise())
profile.place(x=1350,y=25)
#Overlay
logo2 = Label(overlay_frame, text='', bg='grey',width=5,height=3)
logo2.place(x=20,y=25)
overlay_name = Label(overlay_frame, text='User',fg='black',bg='white',font=("Arial", 40))
overlay_name.place(x=100,y=25)
sign_out_btn = Button(overlay_frame,text='Sign Out', highlightbackground='blue', command=lambda:(Login_page.tkraise(),clear1()))
sign_out_btn.place(x=50,y=100)
#Menu
open_file_btn = Button(menu_page,text='Open',fg='white',bg='blue',font=("Arial", 30), width=10,height=3, command=open_finder_and_copy_to_project)
open_file_btn.place(x=90,y=200)
#Body
welcome_user = Label(main_page,text='Welcome User',font=("Arial", 50, "bold"))
welcome_user.place(x=300,y=150)
##########################
#SCROLLBAR NOT WORKING D:
canvas2 = Canvas(main_page,width=1115,height=500)
canvas2.place(x=300,y=214)
yscrollbar = Scrollbar(main_page,orient='vertical',command=canvas2.yview)
yscrollbar.place(in_=canvas2, relx=1.0, relheight=1.0, bordermode="outside")
canvas2.configure(yscrollcommand=yscrollbar.set)
canvas2.bind('<Configure>',lambda e: canvas2.configure(scrollregion = canvas2.bbox('all')))
second_frame = Frame(canvas2)
canvas2.create_window((0,0),window=second_frame)
#images
#img1 = Frame(second_frame)
#img1.configure(width=600,height=300,bg='grey')
#img1.place(x=0,y=0)
#img2 = Frame(second_frame)
#img2.configure(width=300,height=300,bg='grey')
#img2.place(x=650,y=0)
#img3 = Frame(second_frame)
#img3.configure(width=600,height=300,bg='grey')
#img3.place(x=0,y=100)
#img4 = Frame(second_frame)
#img4.configure(width=300,height=300,bg='grey')
#img4.place(x=650,y=100)
#data_menu
data_scrollbar = Scrollbar(data_menu)
data_listbox = Listbox(data_menu, yscrollcommand = data_scrollbar.set,width=100,height=20,font=("Arial", 20),fg='white',justify=LEFT)
data_scrollbar.configure( command = data_listbox.yview )
data_listbox.place(x=0,y=50)
data_scrollbar.place(in_=data_listbox, relx=1.0, relheight=1.0, bordermode="outside")
col1 = Label(column_header,text='Student Name',font=("Arial", 30, "bold"))
col1.place(x=250,y=5)
col2 = Label(column_header,text='Period 1',font=("Arial", 30, "bold"))
col2.place(x=600,y=5)
col3 = Label(column_header,text='Period 2',font=("Arial", 30, "bold"))
col3.place(x=850,y=5)
display_btn = Button(data_menu,text='Display',font=("Arial", 40, "bold"),command=lambda:(plot(),display_frame.tkraise()))
display_btn.place(x=600,y=550)
#Display Frame
fig, ax = plt.subplots()
canvas = FigureCanvasTkAgg(fig,master=display_frame)
canvas.get_tk_widget().place(x=0,y=0)
win.mainloop()
1