Есть ли прокручиваемый просмотрщик для tkinter в андроиде? - PullRequest
0 голосов
/ 12 мая 2019

Я работаю над приложением, использующим 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...