Я работаю над приложением, использующим tkinter на моем android, используя python.Я могу нормально запустить код tkinter, используя PyDroid3 в магазине приложений.Однако у меня есть некоторые проблемы с прокручиваемыми представлениями.
Кажется, что некоторые виджеты в tkinter т.е.(«Текст») может читать жесты прокрутки на телефоне для прокрутки линий вверх и вниз.Однако я пытаюсь создать средство просмотра, которое также может воспроизводить это поведение.
Я попытался добавить кадр с полосой прокрутки, но он не зарегистрировал жест прокрутки.Я пытался реализовать свой собственный просмотрщик прокрутки с помощью перемещения и отпускания мыши, но он не так хорош, как распознаватель жестов в виджете «Текст».
from tkinter import *
global canvas,scrolly
def on_scrollwheel(event):
global canvas,scrolly
# canvas.yview_scroll(-1*(event.delta/120), "units")
mag = 2
scrollVal = mag*int(-1*event.delta/abs(event.delta))
canvas.yview_scroll(scrollVal, "units")
def on_mousemove(event):
global canvas,scrolly
# canvas.yview_scroll(-1*(event.delta/120), "units")
# scrollVal = int(-1*event.delta/abs(event.delta))
try:
print(scrolly)
scrollVal = event.y - scrolly
if(abs(scrollVal) > 10):
print(scrollVal)
scrollDir = int(scrollVal/abs(scrollVal))
canvas.yview_scroll(scrollDir,'units')
scrolly = event.y
except NameError:
scrolly = event.y
def on_mousedown(event):
global scrolly
scrolly = event.y
def on_mouseup(event):
global canvas,scrolly
scrollVal = event.y - scrolly
print(scrollVal)
if(abs(scrollVal) > 1):
print(scrollVal)
for i in range(3):
scrollDir = int(scrollVal/abs(scrollVal))
canvas.yview_scroll(scrollDir,'units')
del scrolly
def on_configure(event):
# update scrollregion after starting 'mainloop'
# when all widgets are in canvas
canvas.configure(scrollregion=canvas.bbox('all'))
def data():
for i in range(200):
Label(frame,text=i).grid(row=i,column=0)
Label(frame,text="my text"+str(i)).grid(row=i,column=1)
Label(frame,text=".....asdfasdfasdfasdfadsfadsf.....").grid(row=i,column=2)
def myfunction(event):
canvas.configure(scrollregion=canvas.bbox("all"),width=600,height=1100)
root=Tk()
sizex = 400
sizey = 400
posx = 100
posy = 100
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
myframe=Frame(root,relief=GROOVE,width=600,height=1100,bd=1)
myframe.place(x=10,y=10)
# --- create canvas with scrollbar ---
global canvas
canvas=Canvas(myframe)
frame=Frame(canvas)
myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)
myscrollbar.pack(side="right",fill="y")
canvas.pack(side="left")
canvas.create_window((0,0),window=frame,anchor='nw')
frame.bind("<Configure>",myfunction)
data()
# Scroll Approach 1
canvas.bind_all("<B1-Motion>", on_mousemove)
canvas.bind_all("<Button-1>", on_mousedown)
canvas.bind_all("<ButtonRelease-1>", on_mouseup)
canvas.bind_all("<MouseWheel>", on_scrollwheel)
while True:
try:
root.mainloop()
break
except UnicodeDecodeError:
pass