ich habe in meinem Code das Problem, daß wenn man mit der Maus das Fenster so weit vergrößert, daß die Scrollbar(s) verschwinden und dann
wieder zurück verkleinert, die Scrollbars dann nicht mehr richtig angezeigt werden.
Würde gern wissen, was da falsch ist

Nach meinem Verständnis liegt das an der Funktion 'on_configure', da nach dem Start erstmal alles korrekt funktioniert.
Würde mich über Hilfe freuen.
Code: Alles auswählen
import tkinter as tk
import os
import pandas as pd
class Main(tk.Tk):
def __init__(self,
main_path, input_folder, process_folder, db_folder
):
tk.Tk.__init__(self)
# self.geometry('600x300+450+100')
self.main_path = main_path
self.process_folder = process_folder
self.db_folder = db_folder
self.preview = {}
# Auslesen einer Excel-Datei...
for file_name in os.listdir(input_folder):
if file_name.endswith(".xlsx"):
if "~$" not in file_name:
input_file = os.path.join(input_folder, file_name)
xlsx = pd.ExcelFile(input_file)
if file_name not in self.preview:
self.preview[file_name] = {}
for sheet_name in xlsx.sheet_names:
df = pd.DataFrame(pd.read_excel(input_file, sheet_name=sheet_name))
if not df.empty:
self.preview[file_name][sheet_name] = pd.read_excel(input_file,
header=None,
sheet_name=sheet_name
)
self.preview_frame = tk.Frame(self, bg="yellow")
def main(self):
self.preview_frame.pack(fill=tk.BOTH, expand=True)
Preview_Table(self.preview_frame, 'Name_der_Excel_Datei.xlsx', self.preview)
class Preview_Table(tk.Frame):
def __init__(self, preview_frame, process_name, preview_dict):
tk.Frame.__init__(self)
self.preview_frame = preview_frame
self.process_name = process_name
self.preview_dict = preview_dict
label_bg = "white"
label_fg = "black"
key, values = list(self.preview_dict[self.process_name].items())[0]
# print('Dateiname:', self.process_name)
# print('Tabellenname:', key)
# print("Zeilen:", values)
# print('---')
canvas_yscroll = tk.Frame(self.preview_frame, bg="green")
canvas_yscroll.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
# Add a canvas in that frame.
self.canvas = tk.Canvas(canvas_yscroll)
self.canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
vsbar = tk.Scrollbar(canvas_yscroll, orient=tk.VERTICAL, command=self.canvas.yview)
vsbar.pack(side=tk.RIGHT, fill=tk.Y)
self.canvas.configure(yscrollcommand=vsbar.set)
hsbar = tk.Scrollbar(self.preview_frame, orient=tk.HORIZONTAL, command=self.canvas.xview)
hsbar.pack(side=tk.BOTTOM, fill=tk.X)
self.canvas.configure(xscrollcommand=hsbar.set)
label_frame = tk.Frame(self.canvas, bd=2)
for i, cell_list in values.items():
for j, cell_text in enumerate(cell_list.tolist()):
label = tk.Label(label_frame,
padx=7,
pady=7,
relief=tk.RIDGE,
bg=label_bg,
fg=label_fg,
text=cell_text)
label.grid(column=i, row=j, sticky=tk.NSEW)
self.canvas.create_window((0, 0), window=label_frame, anchor=tk.NW)
label_frame.update_idletasks()
self.bbox = self.canvas.bbox(tk.ALL)
self.canvas.configure(scrollregion=self.bbox,
xscrollcommand=lambda mx_f, mx_l: self.auto_scroll(hsbar, mx_f, mx_l),
yscrollcommand=lambda my_f, my_l: self.auto_scroll(vsbar, my_f, my_l)
)
self.canvas.bind('<Configure>', self.on_configure)
# Hier ist der Fehler (denke ich)
def on_configure(self, event):
self.canvas.configure(scrollregion=self.bbox)
@staticmethod
def auto_scroll(sbar, first, last):
first, last = float(first), float(last)
if first <= 0 and last >= 1:
sbar.pack_forget()
else:
sbar.pack()
sbar.set(first, last)
if __name__ == '__main__':
path_main = os.getcwd()
path_input_folder = os.path.join(path_main, "input")
path_process_folder = os.path.join(path_main, 'process')
path_db_folder = os.path.join(path_main, "database")
frontend = Main(path_main,
path_input_folder,
path_process_folder,
path_db_folder)
frontend.main()
frontend.mainloop()