2017-11-04 20 views
0

これは、マウスカーソルがスクロールスライダの上にあるときだけスクロールするショートノートブックコードです。 私の問題に関する情報が見つかりません。私がインターネットなどで見つけた例は、時にはうまくいくが、私の場合はそうではない。 Python3.4のwin7の64tkinterノートブックタブのtkinterフレーム(キャンバス付き)上のtkinterスクロールバーは、スクロールスライダー上にマウスカーソルがある場合にのみスクロールしますか?

# -*- coding: utf-8 -*- 
import tkinter 
from tkinter import ttk 
import sys,pickle,webbrowser 


def cocoa_click(event): 
    webbrowser.open("http://stts.pythonanywhere.com/") 

mainframe = tkinter.Tk() 

mainframe_width = (mainframe.winfo_screenwidth()/2 - 200) 
mainframe_heigth = (mainframe.winfo_screenheight()/2 - 250) 
mainframe.geometry("%dx%d+%d+%d" % (1000, 600, mainframe_width, mainframe_heigth)) 
mainframe.title('DAS progress 132') 
mainframe.resizable(False,True) 
n_book = ttk.Notebook(mainframe) 
n_book.pack(fill='both', expand='yes') 
n_book.pressed_index = None 

x_name=["tabnote1","tabnote2","tabnote3","tabnote4"] 
x_container=[]; x_canvas=[]; x_scroll=[]; x_frame=[] 
cvsw,cvsh=960,400; 
sreg=(0,0,1000,1320) 

for i in range(4): 
    x_container.append(tkinter.Frame(n_book)) 
    x_container[i].pack(fill=tkinter.BOTH, expand=True) 
    n_book.add(x_container[i], text=x_name[i]) # add container to note book 
    x_canvas.append(tkinter.Canvas(x_container[i], width=cvsw, height=cvsh)) # add canvas to container 
    x_scroll.append(tkinter.Scrollbar(x_container[i], command=x_canvas[i].yview)) # add scroll to container 
    x_canvas[i].config(yscrollcommand=x_scroll[i].set, scrollregion=sreg) 
    x_canvas[i].pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=True) 
    x_scroll[i].config(width=240) 
    x_scroll[i].pack(side=tkinter.RIGHT, fill=tkinter.Y, expand=True) 


cocoa = ttk.Button(mainframe,text="(: cocoa") # add button to mainframe - worked 
cocoa.place(height=40,width=600,relx=0.4,rely=0) 
cocoa.bind("<Button-1>",cocoa_click) 
mainframe.mainloop() 
+0

?マウスが上にない場合、どのようにスクロールスライダーを動かしていますか? –

+0

私の場合は解決策が見つかりましたが、それはきれいではなく、正確ではありません。今win7上でパネルの幅の任意の位置にカーソルを置くとパネルをスクロールすることができますが、スクロールスライダーだけでなく – lenivaya10001

答えて

0

あなたは「のみスクロールスライダーを超える」とはどういう意味ですか私は私の場合のために汚いソリューションを見つけたが、それは(Linuxは違い挙動を有する)クロスプラットフォームではない

# -*- coding: utf-8 -*- 
import tkinter 
from tkinter import ttk 
import sys,pickle,webbrowser 

def on_mousewheel(event): 
    try: 
     print("e ",event) 
     shift = (event.state & 0x1) != 0 
     canvas=event.widget 
     scroll = -1 if event.delta > 0 else 1 
     if shift: 
      canvas.xview_scroll(scroll, "units") 
     else: 
      canvas.yview_scroll(scroll, "units") 
    except:pass 

def cocoa_click(event): 
    webbrowser.open("http://stts.pythonanywhere.com/") 

mainframe = tkinter.Tk() 
mainframe_width = (mainframe.winfo_screenwidth()/2 - 200) 
mainframe_heigth = (mainframe.winfo_screenheight()/2 - 250) 
mainframe.geometry("%dx%d+%d+%d" % (1000, 600, mainframe_width, mainframe_heigth)) 
mainframe.title('DAS progress 132') 
mainframe.resizable(False,True) 
n_book = ttk.Notebook(mainframe) 
n_book.pack(fill='both', expand='yes') 
n_book.pressed_index = None 

x_name=["tabnote1","tabnote2","tabnote3","tabnote4"] 
x_container=[]; x_canvas=[]; x_scroll=[]; x_frame=[] 
cvsw,cvsh=960,400; 
sreg=(0,0,1000,1320) 

for i in range(4): 
    x_container.append(tkinter.Frame(n_book)) 
    x_container[i].pack(fill=tkinter.BOTH, expand=True) 
    n_book.add(x_container[i], text=x_name[i]) # add container to note book 
    x_canvas.append(tkinter.Canvas(x_container[i], width=cvsw, height=cvsh)) # add canvas to container 
    x_scroll.append(tkinter.Scrollbar(x_container[i], command=x_canvas[i].yview)) # add scroll to container 
    x_canvas[i].config(yscrollcommand=x_scroll[i].set, scrollregion=sreg) 
    x_canvas[i].pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=True) 
    x_scroll[i].config(width=240) 
    x_scroll[i].pack(side=tkinter.RIGHT, fill=tkinter.Y, expand=True) 
    x_canvas[i].bind_all("<MouseWheel>", on_mousewheel) # index always 3 


cocoa = ttk.Button(mainframe,text="(: cocoa") # add button to mainframe - worked 
cocoa.place(height=40,width=600,relx=0.4,rely=0) 
cocoa.bind("<Button-1>",cocoa_click) 
mainframe.mainloop() 
関連する問題