Witam
Taki oto kodzik:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import *
main=Tk()
main.geometry("500x400+200+100")
def f_top():
def can_scroll_up(event):
can.yview_scroll(1, "units")
return
def can_scroll_down(event):
can.yview_scroll(-1, "units")
return
# def can_scroll_left(event):
# pass
# return
# def can_scroll_right(event):
# pass
# return
top = Toplevel()
top.geometry("600x300")
top.grab_set()
top.transient(main)
top.resizable(width=False, height=False,)
frm_out = Frame(top, bd=2, relief='raised',)
frm_out.pack(fill='both', expand=True,)
vscrbar = Scrollbar(frm_out)
hscrbar = Scrollbar(frm_out)
# hscrbar.bind_all("<Button-5>", can_scroll_left)
# hscrbar.bind_all("<Button-4>", can_scroll_right)
can = Canvas(frm_out, background = "blue", xscrollcommand=hscrbar.set, yscrollcommand=vscrbar.set,)
#can.bind_all("<Button-5>", can_scroll_up)
#can.bind_all("<Button-4>", can_scroll_down)
vscrbar.config(command=can.yview, orient='vertical')
hscrbar.config(command=can.xview, orient="horizontal")
frm_inner=Frame(can,)
frm_inner.bind_all("<Button-5>", can_scroll_up)
frm_inner.bind_all("<Button-4>", can_scroll_down)
can.grid(row=0, column=0, sticky="nsew")
vscrbar.grid(row=0, column=1, sticky="ns")
hscrbar.grid(row=1, column=0, sticky="ew")
frm_out.grid_rowconfigure(0, weight=2)
frm_out.grid_columnconfigure(0, weight=2)
can.create_window(0,0,window=frm_inner, anchor='nw')
for item in range(20):
Label(frm_inner, text=str(item)+" Jakiś bardzo długi tekst, aby wychodził poza okno. Wtedy slider na dole przyjmie właściwy rozmiar.").pack()
Button(frm_inner, text="Button").pack()
frm_out.update_idletasks()
can.config(scrollregion=can.bbox("all"))
top.mainloop()
return
btn = Button(main, text='Open', command=f_top).pack()
main.mainloop()
quit()
Problemem jest skrolowanie za pomocą rolki i ten skrol dzieje się na dolnym siderze góra/dół. bind jest przypięty do Frame, która jest wewnątrz Canvas. Więc w chyba nie obejmuje tego slidera. Fajnie by był skroll na dolnym sliderze na lewo/prawo. Podpięcie bind do skrola poziomego nic nie daje.
Pozdrawiam
Radek Glebicki